2

クリア ボタンを持つ EditText である複合コントロールを作成したいと考えています。主な機能は EditText 機能であるため、EditText のすべての属性を使用してレイアウト xml で宣言できるようにしたいと考えています。しかし、実際には EditText と ImageButton を含む LinearLayout になります。

また、コード内の EditText と同じように使用したいので、代わりにドロップできます。

これまでのところ、このレイアウトがあります:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:background="@android:drawable/editbox_background" >
    <EditText 
        android:id="@+id/editText"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:layout_gravity="center_vertical"
        android:background="#FFF" />
    <ImageButton
        android:id="@+id/clear"
        android:src="@drawable/clear_text"
        android:background="#FFF"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical" />
</LinearLayout>

しかし、私はどのように進むべきかわかりません。このレイアウトを使用するために LinearLayout にする必要がある場合、EditText を拡張するコントロールを定義するにはどうすればよいですか? または、onDraw() で x を手動で描画し、自分でクリックを処理する唯一のオプションですか?

4

2 に答える 2

0
 public class myedittext extends LinearLayout{
 EditText e1;
  ImageButton ib;
  OnClickListener cleartext;
 public myedittext(Context c){
  super(c);
   String inflater=context.LAYOUT_INFLATER_SERVICE;
  LayoutInflater lif;
  li=(LayoutInflater)getContext().getSystemService(inflater);
  li.inflate((R.layout.yourlayoutname,this,true);
 e1=(EditText)findViewById(R.id.editText);
   ib=(ImageButton)findViewById(R.id.clear);


  cleartext = new OnClickListener(){

    @Override
    public void onClick(View v) {

        e1.setText("");
    }
   };
  ib.setOnClickListener(cleartext);
 }
   }
于 2012-04-20T01:13:49.853 に答える
-1

LinearLayoutXML のように拡張するカスタム ビュー クラスを宣言できます。次に、Xml をロードしてカスタム ビューに追加します。

XML で使用する場合は、最初に以下のように attrs.xml で独自の XML 属性を宣言する必要があります。

<declare-styleable name="CustomEditText">
    <attr name="text" format="string" />
</declare-styleable>

次に、コンストラクターをオーバーライドし、Attributes attrs以下のコードのように属性を解析します

TypedArray a = context.obtainStyledAttributes(attrs,R.styleable.CustomEditText);
CharSequence s = a.getString(R.styleable.CustomEditText_text);
setText(s.toString());

次のように XML で使用します。

xmlns:anything="http://schemas.android.com/apk/res/yourpackagename" // for declare your namespace
<yourpackagename
        android:background="@drawable/blue"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" 
        anything:text="hi"/>

コードのように使用するにはeditText、カスタム ビュー クラスをラップするだけです。

于 2012-04-20T01:29:42.293 に答える