1

カスタム EditText コンポーネントの高さをプログラムで設定しようとしていますが、成功しません。カスタム フォントを設定するために、EditText から継承するカスタム クラスがあります。EditText の高さとパディングを更新したいのですが、すべての意図が更新されません。XML ファイルで高さを設定した場合のみ、高さが更新されます。

ここで XML:

<example.ui.customcontrols.CustomEditText
    android:id="@+id/txtUsername"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_marginBottom="2dip"
    android:layout_marginTop="2dip"
    android:inputType="text"
    android:singleLine="true" />

カスタム EditText のコードは次のとおりです。

public class CustomEditText extends EditText {
    public CustomEditText(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        this.init();
    }
    public CustomEditText(Context context, AttributeSet attrs) {
        super(context, attrs);
        this.init();
    }
    public CustomEditText(Context context) {
        super(context);
        this.init();
    }
    public void init() {
        UIHelper.setTypeface(this);
        this.setTextSize(17);

        // This is not working.
        this.setLayoutParams(newLayoutParams(LayoutParams.FILL_PARENT, 10));
        this.setPadding(this.getPaddingLeft(), 0, this.getPaddingRight(), 0);
    }
}

同じものを使用する同様の投稿を見たことがありますが、機能させることができませんでした。

アップデート:

迅速な回答が得られたので、シナリオの説明を以下に示します。

  1. アクティビティ レイアウトに動的に追加される EditText がたくさんあります。アクティビティからではなく、カスタム コントロールからそれを行う必要があります。layoutparams を読み取って設定するために、EditText (onDraw、onPredraw など) で適切なイベントを探しています。オーバーライドする適切なイベントが見つかったらお知らせください。もう一度!
  2. getLayoutParams は、ビュー (EditText) のコンストラクターで null を返します。したがって、レイアウトがインスタンス化されると、適切なイベントに対処することが解決策になると思います。
  3. これまでのところ、onDraw、onLayout、onFinishInflate などの多くのイベントについて試してみましたが、param は無視されるか、例外がスローされます。

現在の回答は Tks、それ以上の回答は TIA でお願いします。

ミルトン。

4

2 に答える 2

1

CustomEditText を含むレイアウトから実行してみてください。例えば:

main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:orientation="vertical"
          android:layout_width="fill_parent"
          android:layout_height="fill_parent"
    >
<com.example.untitled1.CustomEditText
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Hello World, MyActivity"
        android:id="@+id/et"
        />

MyActivity.java

public class MyActivity extends Activity {

private CustomEditText et;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    et= (CustomEditText) findViewById(R.id.et);
    ViewGroup.LayoutParams lp = et.getLayoutParams();
    lp.width = 100;
    lp.height = 100;
    et.setLayoutParams(lp);
}

}

魔法のように働く!

于 2013-04-05T13:58:48.160 に答える
0
   LayoutParams params = layout.getLayoutParams();
 // Changes the height and width to the specified *pixels*
 params.height = 100;
 params.width = 100;
于 2013-04-05T13:55:44.957 に答える