在Android开发中,我们的Activity都不免要用到很多的View部件,而对于每一个View我们都要findViewById,设置监听器,获取用户输入的结果等操作。如果我们细心想想,这些琐碎的操作是不是跟这个Activity的处理逻辑没有很大的关系呢?很多的Activity中都要用到一些常见的View组合,能不能把他们抽象出来形成一种可以复用的复合组件呢?
这篇文章就是基于这种想法,开发了一个简单的组件,对于Android新手来说,可以作为一种参考吧。
EditTextWithLabel组件类定义:(EditTextWithLabel.java)
代码如下 |
复制代码 |
package com.raysmond.component;
import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;
public class EditTextWithLabel extends LinearLayout{
TextView label;
EditText text;
public EditTextWithLabel(Context context,AttributeSet attrs){
super(context, attrs);
setOrientation(HORIZONTAL);
LayoutInflater.from(context).inflate(R.layout.edit_text_with_label, this, true);
label = (TextView) findViewById(R.id.comp_le_label);
text = (EditText) findViewById(R.id.comp_le_content);
}
public boolean setSubViewFocus(){
return text.requestFocus();
}
public EditText getEditText(){
return text;
}
public String getContent(){
return text.getText().toString();
}
public void setContent(String str){
text.setText(str);
}
public void setError(String error){
text.setError(error);
}
}
|
EditTextWithLabel组件的布局xml(edit_text_with_label.xml)
代码如下 |
复制代码 |
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android">
<TextView
android:id="@+id/comp_le_label"
android:layout_width="wrap_content"
android:layout_weight="3"
android:layout_height="wrap_content"
android:paddingRight="5dp"
android:text="Label"
android:textSize="25sp"
android:gravity="center"/>
<EditText
android:inputType="text"
android:id="@+id/comp_le_content"
android:layout_width="wrap_content"
android:layout_weight="7"
android:layout_height="wrap_content"
android:textSize="25sp"
>
<requestFocus />
</EditText>
</merge>
|
使用EditTextWithLabel复合组件,主Activity的XML (activity_main.xml)
代码如下 |
复制代码 |
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<TextView
android:layout_width="wrap_content"
android:id="@+id/hello_world"
android:layout_height="wrap_content"
android:textSize="28sp"
android:text="带Label的输入框组件" />
<com.raysmond.component.EditTextWithLabel
android:id="@+id/test_component"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/hello_world"
/>
</RelativeLayout>
|
使用EditTextWithLabel复合组件,主Activity类(MainActivity.java)
代码如下 |
复制代码 |
package com.raysmond.activity;
import com.raysmond.component.EditTextWithLabel;
import com.raysmond.component.R;
import android.os.Bundle;
import android.app.Activity;
public class MainActivity extends Activity {
EditTextWithLabel component;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findView();
}
public void findView(){
component = (EditTextWithLabel) findViewById(R.id.test_component);
component.setSubViewFocus();
}
}
|
Demo:
时间: 2024-08-02 19:34:34