当一页的布局很多条目都相同如何防止代码冗余

当写布局的时候,有很多的条目都一样,如果你想复制粘贴的话,那布局文件可就太长了,太难受了。
如果用ListView的多套布局的话,那也太麻烦了,如果布局的个数特别特别的多的话,那会想相当麻烦。
使用自定义View,把同样的布局抽取出来

代码如下: viewsettingitem.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="60dp"
android:padding="5dp" >

<TextView
    android:id="@+id/tv_title"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textColor="@color/black"
    android:textSize="18sp" />

<TextView
    android:id="@+id/tv_desc"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/tv_title"
    android:layout_marginTop="3dp"
    android:textColor="#a000"
    android:textSize="16sp" />

<!--由于这个条目上面有一个CheckBox 他会抢焦点的
所以加上三个属性 

    android:clickable="false"
    android:focusable="false"
    android:focusableInTouchMode="false"

就OK了-->

<CheckBox
    android:id="@+id/cb_status"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:clickable="false"
    android:focusable="false"
    android:focusableInTouchMode="false"
    android:layout_centerVertical="true" />

<View
    android:layout_width="match_parent"
    android:layout_height="0.2dp"
    android:layout_alignParentBottom="true"
    android:background="#a000" />

</RelativeLayout>

自定义View:SettingItemView

package com.wisdom.mobiesafe.view;

import com.wisdom.mobiesafe.R;

import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.widget.CheckBox;
import android.widget.RelativeLayout;
import android.widget.TextView;

/**
 * 设置中新的自定义控件
 * @author ZZH
 *
 */
public class SettingItemView extends RelativeLayout {

private TextView tvTitle;
private TextView tvDesc;
private CheckBox cbStatus;

public SettingItemView(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    initView();
}

public SettingItemView(Context context, AttributeSet attrs) {
    super(context, attrs);
    initView();
}

public SettingItemView(Context context) {
    super(context);
    initView();
}

/**
 * 初始化布局
 */
private void initView() {
    // 将自定义的布局文件设置给当前的SettingItemView
    View.inflate(getContext(), R.layout.view_setting_item, this);
    tvTitle = (TextView)findViewById(R.id.tv_title);
    tvDesc = (TextView)findViewById(R.id.tv_desc);
    cbStatus = (CheckBox)findViewById(R.id.cb_status);
}
public void setTitle(String title){
    tvTitle.setText(title);
}

public void setDesc(String desc){
    tvDesc.setText(desc);
}

/**
 * 返回勾选状态
 * @return
 */
public boolean isChecked(){
    return cbStatus.isChecked();
}

public void setChecked(boolean check){
    cbStatus.setChecked(check);
}
}

然后在布局文件中使用该布局: activity_setting.xml

<com.wisdom.mobiesafe.view.SettingItemView
    android:id="@+id/siv_update"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >
</com.wisdom.mobiesafe.view.SettingItemView>

在Activity里面:SettingActivity

package com.wisdom.mobiesafe.activity;

import com.wisdom.mobiesafe.R;
import com.wisdom.mobiesafe.view.SettingItemView;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;

/**
 * 设置中心
 * @author ZZH
 *
 */
public class SettingActivity extends Activity {

private SettingItemView sivUpdate;//设置升级

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_setting);
    sivUpdate = (SettingItemView) findViewById(R.id.siv_update);
    sivUpdate.setTitle("自动更新设置");
    sivUpdate.setDesc("自动更新已开启");

    sivUpdate.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            //判断当前的状态
            if(sivUpdate.isChecked()){
                //设置不勾选
                sivUpdate.setChecked(false);
                sivUpdate.setDesc("自动更新已关闭");
            }else{
                sivUpdate.setChecked(true);
                sivUpdate.setDesc("自动更新已开启");
            }
        }
    });
    }
}

由于这个条目上面有一个CheckBox 把CheckBox给禁掉,他会抢焦点的所以加上三个属性

android:clickable="false"
android:focusable="false"
android:focusableInTouchMode="false"

就OK了

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值