前回は、下部のタブバーの作成を要約し、ホームページフレームを作成するためのTabActivityの使用についても要約しました。今回は、ActivityGroupを使用してホームページフレームワークを作成する方法について説明します。実際、コアコンテンツページはフラグメントではなくアクティビティを使用するため、2つのホームページフレームワークはほとんど同じです。それで、私はこれら2つを組み合わせて、それについて話します。私たちは2つの部分に分かれています。1つはTabActivityと比較することです。結局のところ、それは同じです。要約するのが得意でなければなりません。1つはコードを投稿することです。
1.ActivityGroupとTabActivityの比較
- ルートレイアウトノードはTabHostを使用しなくなり、代わりに一般的な線形レイアウトLinearLayoutを使用します。
- ルーチンオプションウィジェットであるTabWidgetを削除しました
- コンテンツページが固定番号のフレームレイアウトからカスタム番号の線形レイアウトに変更されました
2.コード例
ActivityGroupはTabActivityよりも簡潔であることがわかるので、コードをどのように見るか
レイアウトファイル
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<FrameLayout
android:id="@+id/fr_container"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />
<!-- 标签-->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/tv1"
style="@style/TabButton"
android:drawableTop="@drawable/text_pic"
android:text="首页" />
<TextView
android:id="@+id/tv2"
style="@style/TabButton"
android:drawableTop="@drawable/text_pic"
android:text="商品" />
<TextView
android:id="@+id/tv3"
style="@style/TabButton"
android:drawableTop="@drawable/text_pic"
android:text="发现" />
<TextView
android:id="@+id/tv4"
style="@style/TabButton"
android:drawableTop="@drawable/text_pic"
android:text="我的" />
</LinearLayout>
</LinearLayout>
レイアウトの中核はFrameLayoutで、他は前に説明したように通常のラベルボタンです。
Javaソースファイル
public class MainActivity extends ActivityGroup implements View.OnClickListener {
private TextView tv1;
private TextView tv2;
private TextView tv3;
private TextView tv4;
private FrameLayout fr_container;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv1 = findViewById(R.id.tv1);
tv2 = findViewById(R.id.tv2);
tv3 = findViewById(R.id.tv3);
tv4 = findViewById(R.id.tv4);
fr_container = findViewById(R.id.fr_container);
tv1.setOnClickListener(this);
tv2.setOnClickListener(this);
tv3.setOnClickListener(this);
tv4.setOnClickListener(this);
tv1.setSelected(true);
toActivity("one",OneActivity.class);
}
/**
* 把内容视图切换到对应的Activity活动页面
* @param label
* @param cls
*/
private void toActivity(String label,Class<?> cls){
//创建一个意图,并存入指定包裹
Intent intent = new Intent(this,cls);
//移除内容框架下面的所有下级视图
fr_container.removeAllViews();
//启动意图指向的活动,并获取该活动页面的顶层视图
View v = getLocalActivityManager().startActivity(label,intent).getDecorView();
//设置内容视图的布局参数
v.setLayoutParams(new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT));
//把活动页面的顶层视图(即内容视图)添加到内容框架上
fr_container.addView(v);
}
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.tv1:
if (!tv1.isSelected()){
tv1.setSelected(true);
tv2.setSelected(false);
tv3.setSelected(false);
tv4.setSelected(false);
toActivity("one",OneActivity.class);
}
break;
case R.id.tv2:
if (!tv2.isSelected()) {
tv1.setSelected(false);
tv2.setSelected(true);
tv3.setSelected(false);
tv4.setSelected(false);
toActivity("two",TwoActivity.class);
}
break;
case R.id.tv3:
if (!tv3.isSelected()) {
tv1.setSelected(false);
tv2.setSelected(false);
tv3.setSelected(true);
tv4.setSelected(false);
toActivity("three",ThreeActivity.class);
}
break;
case R.id.tv4:
if (!tv4.isSelected()) {
tv1.setSelected(false);
tv2.setSelected(false);
tv3.setSelected(false);
tv4.setSelected(true);
toActivity("four",FourActivity.class);
}
break;
}
}
}
Activityでは、最初にActivityGroupを継承し、次にtoActivityメソッドに焦点を当てます。Activityに対応するラベル付きラベルとClassオブジェクトを渡すことができます。toActivityメソッドは、ジャンプするときに呼び出されます。