zoukankan      html  css  js  c++  java
  • Android 使用Fragment,ViewPagerIndicator 制作csdn app主要框架

    转载  转载请注明出处:http://blog.csdn.net/lmj623565791/article/details/23513993

    本来准备下载个CSDN的客户端放手机上,没事可以浏览浏览资讯,下载了官方的之后,发现并不能很好的使用。恰好搜到一个大神自己写的csdn的app,下载安装了一下,感觉很不错,也很流畅,基本满足了我们 日常浏览的需求。

    app效果图:








    我会在博客中完整的介绍这个项目的制作,第一篇当然是整个项目的整体结构了。

    效果图:


    1、头部的布局文件,这个很简单:

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.zhy.csdndemo"
        android:versionCode="1"
        android:versionName="1.0" >
    
    
        <uses-sdk
            android:minSdkVersion="13"
            android:targetSdkVersion="17" />
    
    
        <application
            android:allowBackup="true"
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name"
            android:theme="@style/AppTheme" >
            <activity
                android:name="com.zhy.csdndemo.MainActivity"
                android:label="@string/app_name" 
                android:theme="@style/MyTheme">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
        </application>
    
    
    </manifest>

    就显示一个图标和标题。
    2、主布局文件:

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#eee"
        android:orientation="vertical" >
    
    
        <include layout="@layout/main_head" />
    
    
        <com.viewpagerindicator.TabPageIndicator
            android:id="@+id/id_indicator"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:background="@color/transparentblue" >
        </com.viewpagerindicator.TabPageIndicator>
    
    
        <android.support.v4.view.ViewPager
            android:id="@+id/id_pager"
            android:layout_width="fill_parent"
            android:layout_height="0dp"
            android:layout_weight="1" />
    
    
    </LinearLayout>

    一个TabPageIndicator和一个ViewPager。
    3、主Activity

         
    package com.zhy.csdndemo;
    
    
    import com.viewpagerindicator.TabPageIndicator;
    
    
    import android.os.Bundle;
    import android.support.v4.app.FragmentActivity;
    import android.support.v4.app.FragmentPagerAdapter;
    import android.support.v4.view.ViewPager;
    
    
    public class MainActivity extends FragmentActivity
    {
        private TabPageIndicator mIndicator ;
        private ViewPager mViewPager ;
        private FragmentPagerAdapter mAdapter ;
    
    
        @Override
        protected void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
        
            mIndicator = (TabPageIndicator) findViewById(R.id.id_indicator);
            mViewPager = (ViewPager) findViewById(R.id.id_pager);
            mAdapter = new TabAdapter(getSupportFragmentManager());
            mViewPager.setAdapter(mAdapter);
            mIndicator.setViewPager(mViewPager, 0);
            
            
            
        }
        
        
    
    
    }

    TabAdapter.java

     
    package com.zhy.csdndemo;
    
    
    import android.support.v4.app.Fragment;
    import android.support.v4.app.FragmentManager;
    import android.support.v4.app.FragmentPagerAdapter;
    
    
    public class TabAdapter extends FragmentPagerAdapter
    {
    
    
        public static final String[] TITLES = new String[] { "业界", "移动", "研发", "程序员杂志", "云计算" };
    
    
        public TabAdapter(FragmentManager fm)
        {
            super(fm);
        }
    
    
        @Override
        public Fragment getItem(int arg0)
        {
            MainFragment fragment = new MainFragment(arg0);
            return fragment;
        }
    
    
        @Override
        public CharSequence getPageTitle(int position)
        {
            return TITLES[position % TITLES.length];
        }
    
    
        @Override
        public int getCount()
        {
            return TITLES.length;
        }
    
    
    }
     
     

    MainFragment.java

      

    package com.zhy.csdndemo;
    
    
    import android.annotation.SuppressLint;
    import android.os.Bundle;
    import android.support.v4.app.Fragment;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.TextView;
    
    
    @SuppressLint("ValidFragment")
    public class MainFragment extends Fragment
    {
    
    
        private int newsType = 0;
    
    
        public MainFragment(int newsType)
        {
            this.newsType = newsType;
        }
    
    
        @Override
        public void onActivityCreated(Bundle savedInstanceState)
        {
            super.onActivityCreated(savedInstanceState);
        }
    
    
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
        {
            View view = inflater.inflate(R.layout.tab_item_fragment_main, null);
            TextView tip = (TextView) view.findViewById(R.id.id_tip);
            tip.setText(TabAdapter.TITLES[newsType]);
            return view;
        }
    
    
    }

    4、在styles.xml中自定义Theme
      

    <style name="MyTheme" parent="AppBaseTheme">
            <item name="vpiTabPageIndicatorStyle">@style/MyWidget.TabPageIndicator</item>
            <item name="android:windowBackground">@drawable/init_pic</item>
            <item name="android:windowNoTitle">true</item>  
            <item name="android:animationDuration">5000</item>
            <item name="android:windowContentOverlay">@null</item>  
        </style>
        
        <style name="MyWidget.TabPageIndicator" parent="Widget">
            <item name="android:gravity">center</item>
            <item name="android:background">@drawable/vpi__tab_indicator</item>
            <item name="android:paddingLeft">22dip</item>
            <item name="android:paddingRight">22dip</item>
            <item name="android:paddingTop">8dp</item>
            <item name="android:paddingBottom">8dp</item>
            <item name="android:textAppearance">@style/MyTextAppearance.TabPageIndicator</item>
            <item name="android:textSize">16sp</item>
            <item name="android:maxLines">1</item>
        </style>
    
    
        <style name="MyTextAppearance.TabPageIndicator" parent="Widget">
            <item name="android:textStyle">bold</item>
            <item name="android:textColor">@color/black</item>
        </style>


    在AndroidManifest中注册使用:

     
     
    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.zhy.csdndemo"
        android:versionCode="1"
        android:versionName="1.0" >
    
    
        <uses-sdk
            android:minSdkVersion="13"
            android:targetSdkVersion="17" />
    
    
        <application
            android:allowBackup="true"
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name"
            android:theme="@style/AppTheme" >
            <activity
                android:name="com.zhy.csdndemo.MainActivity"
                android:label="@string/app_name" 
                android:theme="@style/MyTheme">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
        </application>
    
    
    </manifest>


    总体还是很简单的,但是效果很不错啊,现在不是流行Fragment么~好了 ,如果这篇文章对你有帮助,赞一个~

  • 相关阅读:
    与灵感之源的vb.net对应的SmartExcel的C#版本
    winform下提高control在UI中的响应速度
    做了一个petoolkit的gui版本,放几张图上来。
    Reflection中对于out类型的获取
    对企业管理软件“代码后”问题的思考
    看了dannyr的java中文类,自己写了一个。
    所有的WMI可以使用的class
    庆祝浪潮集团成为微软在中国的第四家全球战略合作伙伴!(暂时放首页两天)
    一种系统间集成的同步事务异常处理方法和装置
    一种实现多线并行拣选的方法
  • 原文地址:https://www.cnblogs.com/lgphp/p/3856358.html
Copyright © 2011-2022 走看看