您的位置:首页 > 移动开发 > Android开发

Android 多个界面复用一个布局文件(一)

2017-09-15 17:03 218 查看
1.layout_common.xml

复用的布局文件

<?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="wrap_content"
android:orientation="horizontal" >

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1" />

<Button
android:id="@+id/common_button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="按钮1" />

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1" />

<Button
android:id="@+id/common_button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="按钮2" />

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1" />

<Button
android:id="@+id/common_button3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="按钮3" />

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1" />

</LinearLayout>


2.layout_main.xml

主布局文件 ,在这里引用复用的布局文件

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

<RelativeLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_margin="16dp"
android:layout_weight="1" >
</RelativeLayout>

<!-- 在布局文件中引用复用的布局文件 -->

<include layout="@layout/layout_common" />

</LinearLayout>


3.CommonView.java

复用布局文件实例化。单独封装,接口回调。 避免重复写布局文件,避免重复实例化控件,避免重复设置监听方法

package com.example.mytestapp;

import android.app.Activity;
import android.content.Context;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

/**
* 复用布局文件实例化
*/
public class CommonView implements OnClickListener {

// 接口
public interface OnCommonViewClick {
public void onButton1Click(View v);

public void onButton2Click(View v);

public void onButton3Click(View v);
}

public void setListener(OnCommonViewClick listener) {
this.listener = listener;
}

Context mContext;
OnCommonViewClick listener;

public CommonView(Context context) {
this.mContext = context;
}

public Button button1, button2, button3;

public CommonView init() {
button1 = (Button) ((Activity) mContext).findViewById(R.id.common_button1);
button2 = (Button) ((Activity) mContext).findViewById(R.id.common_button2);
button3 = (Button) ((Activity) mContext).findViewById(R.id.common_button3);
button1.setOnClickListener(this);
button2.setOnClickListener(this);
button3.setOnClickListener(this);
return this;
}

@Override
public void onClick(View v) {
if (listener == null)
return;
switch (v.getId()) {
case R.id.common_button1:
listener.onButton1Click(v);
break;
case R.id.common_button2:
listener.onButton2Click(v);
break;
case R.id.common_button3:
listener.onButton3Click(v);
break;
default:
break;
}
}

}


4.MainActivity.java

主界面实例化

package com.example.mytestapp;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;

/*
* 问题:
* 1.如何用代码改变控件的文字或颜色?
*/

public class MainActivity extends Activity implements CommonView.OnCommonViewClick {

int clickTimes = 0;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_main);
// 在这里实例化布局文件, 并实现监听接口方法
// 只需要一行代码就可以直接完成复用代码块的实例化
new CommonView(this).init().setListener(this);
}

@Override
public void onButton1Click(View v) {
clickTimes++;
// 在这里实现对应点击事件的方法
Toast.makeText(this, "你点击了button" + clickTimes + "次", Toast.LENGTH_SHORT).show();

}

@Override
public void onButton2Click(View v) {
// 在这里实现对应点击事件的方法
}

@Override
public void onButton3Click(View v) {
// 在这里实现对应点击事件的方法
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: