【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) {
        // 在這里實現對應點擊事件的方法
    }

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM