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

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) {
        // 在这里实现对应点击事件的方法
    }

}

 

posted @ 2017-09-15 17:03  发明创造小能手  阅读(3478)  评论(0编辑  收藏  举报
levels of contents