在实际项目开发中,不少界面元素都是类似的,我们可以提取出来,根据具体需求加以稍微的改变就可以实现复用,实现了功能同时也减少了代码量。
比如,返回导航栏就是非常通用的界面模块,我们可以定义一个xml,包含返回按钮,以及textview标签显示当前页面的描述。然后,在需要使用返回导航栏目的地方include进去就可以了。
复用的xml代码很简单,就是一个button和textview元素。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="@dimen/padding44"
android:background="@color/orange" >
<Button
android:background="@drawable/navi_btn_selector"
android:id="@+id/btn_navitest_back"
android:layout_centerVertical="true"
android:layout_marginLeft="@dimen/padding15"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/white"
android:textSize="@dimen/text_size_15" />
<TextView
android:typeface="sans"
android:id="@+id/navi_title_test"
android:layout_centerInParent="true"
android:textColor="@color/white"
android:textSize="@dimen/text_size_14"
android:text="主页"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</RelativeLayout>
他的界面效果如图:
那么如何在页面使用复用的xml并让返回按钮生效、以及让“主页”更加业务场景发生改变呢。很简单,先在页面xml中包含进通用的xml,然后在Activity中通过findViewById找到他们,然后实例化,并给按钮设置监听器,给textView设置文字setText。例如:
<?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:background="@color/background_color"
android:orientation="vertical">
<include layout="@layout/a_test_custom_navi_bar"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/padding2"
android:background="@color/white"
android:clickable="true"
android:orientation="horizontal"
android:padding="4dp">
<ImageView
android:id="@+id/iv_state_detail"
android:layout_width="64dp"
android:layout_height="64dp"
android:src="@mipmap/fail"/>
代码没写完整,其实就在顶部include进去就好。 然后是Activity中的代码:
setContentView(R.layout.state_details_activity);
tv_topic_navi = (TextView)findViewById(R.id.navi_title_test);
tv_topic_navi.setText(R.string.topic_detail);
tv_topic_navi.setTextSize(17);
btn_topic_back = (Button)findViewById(R.id.btn_navitest_back);
btn_topic_back.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
StateItemDetailActivity.this.finish();
}
});