结构
1:自定义组合空间,自定义属性
2:抽取样式
3:设置有跑马灯效果的文字或者图片
4:使用GridView
1:自定义组合控件,自定义属性
全部代码
public class setting_view extends RelativeLayout {
private CheckBox ck_box1;
private TextView tv_set1;
private TextView tv_set;
private String mdestitle;
private String mdesoff;
private String mdeson;
public setting_view(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
View.inflate(context, R.layout.settingview,this);
tv_set = (TextView) findViewById(R.id.tv_set);
tv_set1 = (TextView) findViewById(R.id.tv_set1);
ck_box1 = (CheckBox) findViewById(R.id.ck_box);
//获取自定义控件的属性
initAttrs(attrs);
//将属性设置到Textview上
tv_set.setText(mdestitle);
}
private void initAttrs(AttributeSet attrs) {
//这个是打印自定义控件中属性的数量
Log.d("tag","````````````"+attrs.getAttributeCount());
mdestitle = attrs.getAttributeValue(FianlMath.NAME_SPACE,"destitle");
mdesoff = attrs.getAttributeValue(FianlMath.NAME_SPACE,"desoff");
mdeson = attrs.getAttributeValue(FianlMath.NAME_SPACE,"deson");
}
public boolean ischeck() {
return ck_box1.isChecked();
}
public void setcheck(boolean ischeck) {
ck_box1.setChecked(ischeck);
if (ischeck()){
tv_set1.setText(mdeson);
}else {
tv_set1.setText(mdesoff);
}
}
public setting_view(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public setting_view(Context context) {
this(context, null);
}
}
1:写一个类继承布局方式
public class setting_view extends RelativeLayout
2:在XML文件中写出自定义控件中想要放置的控件
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="8dp">
<!-- 必须要让Check Box 不能得到焦点。这里用了
android:clickable="false"
android:focusableInTouchMode="false"
android:focusable="false"
这三个属性-->
<TextView
android:id="@+id/tv_set"
android:textSize="18dp"
android:textColor="#000"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/tv_set1"
android:layout_below="@id/tv_set"
android:textColor="#000"
android:layout_width="wrap_content"
android:layout_height="20dp" />
<CheckBox
android:id="@+id/ck_box"
android:clickable="false"
android:focusableInTouchMode="false"
android:focusable="false"
android:layout_alignParentRight="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<View
android:layout_below="@id/tv_set1"
android:background="#000"
android:layout_width="match_parent"
android:layout_height="1dp" />
</RelativeLayout>
3:在构造方法中找到控件
public setting_view(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
View.inflate(context, R.layout.settingview,this);
tv_set = (TextView) findViewById(R.id.tv_set);
tv_set1 = (TextView) findViewById(R.id.tv_set1);
ck_box1 = (CheckBox) findViewById(R.id.ck_box);
//获取自定义控件的属性
initAttrs(attrs);
//将属性设置到Textview上
tv_set.setText(mdestitle);
}
4:新建attr.XML文件
<resources>
<declare-styleable name="setting_view">
<attr name="destitle" format="string" />
<attr name="desoff" format="string" />
<attr name="deson" format="string" />
</declare-styleable>
</resources>
5:通过参数中 AttributeSet attrs 拿到自定义属性的内容
FianlMath.NAME_SPACE="http://schemas.android.com/apk/res/com.joker.mobilesafe"
attrs.getAttributeValue(FianlMath.NAME_SPACE,"destitle");
2:抽取样式
<style name="TitleTheme">
<!-- Customize your theme here. -->
<item name="android:textColor">#000</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:layout_width">match_parent</item>
<item name="android:background">#0f0</item>
<item name="android:textSize">30sp</item>
<item name="android:padding">10dp</item>
<item name="android:gravity">center</item>
</style>
使用:
<TextView
android:id="@+id/tv_Title"
android:text="功能列表"
style="@style/TitleTheme"
/>
3:设置有跑马灯要过的文字或者图片
<!-- android:ellipsize="marquee" 这个是设置跑马灯,还必须获得焦点
android:focusable="true"
android:focusableInTouchMode="true"
想让他有跑马灯效果必须要获得焦点
android:marqueeRepeatLimit="marquee_forever" 这个是设置无限滚动
android:singleLine="true" 这个是设置单行显示 -->
<TextView
android:id="@+id/tv_Text"
android:layout_below="@id/tv_Title"
android:textColor="#000"
android:text="啊啊啊啊啊啊啊啊啊啊,五环你比四环多一环,怎么办怎么办,你比四环少一环"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"
android:padding="10dp"
android:singleLine="true"
android:marqueeRepeatLimit="marquee_forever"
/>
4:使用GridView
<!--android:numColumns="3" 指定列的数量
android:verticalSpacing="10dp" 条目与条目之间的间距是10dp
-->
<GridView
android:id="@+id/gv_jiugongge"
android:numColumns="3"
android:verticalSpacing="13dp"
android:layout_below="@id/tv_Text"
android:layout_width="match_parent"
android:layout_height="match_parent">
</GridView>
用法和ListView一致。一样设置一个适配器