show code block

2016年7月4日 星期一

Android原件:取消ActionBar、ViewPager的應用

Android原件(actionbar、viewpager):取消ActionBarViewPager的應用



今日實做的影片效果:





 前言


基本上我是看這篇學的,如果有興趣可以參考一下原文:
原作者沒有附上檔案,我有附上github連結,如果有不懂可以下載下來看看。






重要程式碼:

Layout布局   >>>  PagerTabStrip是ViewPager下面那條橫槓
<android.support.v4.view.ViewPager  
 android:id="@+id/viewpager"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <android.support.v4.view.PagerTabStrip
        android:id="@+id/pagertab"
        android:layout_width="wrap_content"
        android:layout_height="50dp"
        ></android.support.v4.view.PagerTabStrip>

</android.support.v4.view.ViewPager>


LayoutInflater填入layout,並且裝入陣列。(載入要顯示的View(Layout))


//設定inflater,並把view(layout)裝入inflater
LayoutInflater lf = getLayoutInflater().from(this);

view1 = lf.inflate(R.layout.layout1, null);
view2 = lf.inflate(R.layout.layout2, null);
view3 = lf.inflate(R.layout.layout3, null);

//將要顯示的view裝入陣列
viewList = new ArrayList<View>();
viewList.add(view1);
viewList.add(view2);
viewList.add(view3);


這是ViewPager的Adapter,在Activity直接設置它的Adapter,使用到Viewpager都需要重寫PagerAdapter。


//設定inflater,並把view(layout)裝入inflater
LayoutInflater lf = getLayoutInflater().from(this);

view1 = lf.inflate(R.layout.layout1, null);
view2 = lf.inflate(R.layout.layout2, null);
view3 = lf.inflate(R.layout.layout3, null);

//將要顯示的view裝入陣列
viewList = new ArrayList<View>();
viewList.add(view1);
viewList.add(view2);
viewList.add(view3);


完整實作:

重點是MainActivity。Layout1~3只要分的出三個的差異就行了。


Activity.java。
import android.content.Intent;
import android.support.annotation.IdRes;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.PagerTabStrip;
import android.support.v4.view.PagerTitleStrip;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {
    private View view1, view2, view3;//滑動的頁面
    private ViewPager viewPager;//viewpager
    private PagerTitleStrip pagerTitleStrip;//viewpager的標題
    private PagerTabStrip pagerTabStrip;//一個viewpager的指示器,效果就是一個橫的粗下滑線
    private List<View> viewList;
    private List<String> titleList;
    private Button webio_button;
    private Intent intent;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        init();

     //取消ActionBar
        getSupportActionBar().hide();
    }

    private void init() {

        viewPager = (ViewPager) findViewById(R.id.viewpager);
        pagerTabStrip = (PagerTabStrip) findViewById(R.id.pagertab);

        //橫粗下滑線 顏色
        pagerTabStrip.setTabIndicatorColor(getResources().getColor(R.color.colorPrimary));

        //?
        pagerTabStrip.setDrawFullUnderline(false);

        //背景顏色
        pagerTabStrip.setBackgroundColor(getResources().getColor(R.color.colorAccent));

        pagerTabStrip.setTextSpacing(100);


        /*精華處*/
        //設定inflater,並把view(layout)裝入inflater
        LayoutInflater lf = getLayoutInflater().from(this);

        view1 = lf.inflate(R.layout.layout1, null);
        view2 = lf.inflate(R.layout.layout2, null);
        view3 = lf.inflate(R.layout.layout3, null);

        //將要顯示的view裝入陣列
        viewList = new ArrayList<View>();
        viewList.add(view1);
        viewList.add(view2);
        viewList.add(view3);
        //每個介面的Title數據
        titleList = new ArrayList<String>();
        titleList.add("page One");
        titleList.add("page Two");
        titleList.add("page Three");

        /*精華處*/
        //viewpager  adapter轉接器 /*Important things 精華*/

        PagerAdapter pagerAdapter = new PagerAdapter() {

            @Override//要使用pagerAdapter必須要有的
            public boolean isViewFromObject(View arg0, Object arg1) {

                return arg0 == arg1;
            }

            @Override//ViewList數量
            public int getCount() {

                return viewList.size();
            }

            @Override//消滅View
            public void destroyItem(ViewGroup container, int position,
                                    Object object) {
                container.removeView(viewList.get(position));

            }

            @Override
            public int getItemPosition(Object object) {

                return super.getItemPosition(object);
            }

            @Override //Titlelist塞入
            public CharSequence getPageTitle(int position) {

                return titleList.get(position);

            }

            @Override
            public Object instantiateItem(ViewGroup container, int position) {
                container.addView(viewList.get(position));

                return viewList.get(position);
            }

        };
        viewPager.setAdapter(pagerAdapter);
    }





}




Activity布局。


<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout 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"


    tools:context="com.example.nikeru8.app_viewpage.MainActivity">

    <android.support.v4.view.ViewPager
       android:id="@+id/viewpager"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <android.support.v4.view.PagerTabStrip
            android:id="@+id/pagertab"
            android:layout_width="wrap_content"
            android:layout_height="50dp"
            ></android.support.v4.view.PagerTabStrip>

    </android.support.v4.view.ViewPager>
</RelativeLayout>




另外三個Layout我是使用Fragment,在這就不贅述了。






















完成囉!

 在結尾順便強調一下取消actionbar這件事,畢竟只有一行....太容易被忽略了!

        getSupportActionBar().hide();

很重要的阿 各位! 


github:
https://github.com/nikeru8/app_viewpage




2016/12/21  微更

其實要消除ActionBar,只要把 extends  AppCompatActivity 

改成extends  Activity ActionBar就會自動消失。

有人問我,那為什麼還要有 getSupportActionBar().hide(); 這個方法呢?


因為ActivityAppCompatActivity他們上面繼承的東西部一樣,有些方法沒辦法在Activity內呼叫。








沒有留言:

張貼留言

協程(coroutine) - 協程為什麼要學它?

 Coroutine 協程 再強調一次 協程就是由kotlin官方所提供的線程api //Thread Thread { }.start() //Executor val execu...