29

いろいろな角度からこれを叩きました。基本的に要点はこれです:

プログラムで実行する必要のあるインターフェイスのテンプレートをXMLでレイアウトしたので、実行中に動的に入力されます。

ここでの問題は、XML TextViewにかなりの数のレイアウト調整(機能する)があり、必要であるということです。しかし、実際にコードで設定すると、TextViewも表示されません。

(ちなみに、TextViewはTableRow内にネストされているため、weightが呼び出されます。)コードの参照として使用するために最初に設計したXMLテンプレートは次のとおりで、問題なく機能します。

<TextView
  android:id="@+id/txtviewWhiteBox"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:layout_weight="1.0"
  android:background="@drawable/textview_9patch_white"
  android:gravity="center"
  android:text="75"
  android:textColor="@android:color/black"
  android:layout_margin="20dp"
  android:padding="20dp"
  android:textSize="40dp" />

私が言ったように、それは完璧にレイアウトされています。ただし、コードで同じレイアウトを実行し、LayoutParamsを適用すると、TextViewが消えます。

関連するスニペットは次のとおりです。

int textViewExampleID = 9001;

private TextView txtviewExample = new TextView(this);

private void buildTextView(){   
    LayoutParams paramsExample = new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT,1.0f);
    txtviewExample.setId(textViewExampleID);
    txtviewExample.setBackgroundResource(R.drawable.textview_9patch_white);
    txtviewExample.setGravity(Gravity.CENTER);
    txtviewExample.setTextColor(getResources().getColor(android.R.color.black));
    paramsExample.setMargins(20, 20, 20, 20);
    txtviewExample.setPadding(20, 20, 20, 20);
    txtviewExample.setTextSize(40); 
    txtviewExample.setText("customExample");

    //if I comment out the following line, this TextView displays.
    //if I leave it in, it doesn't display.
    txtviewExample.setLayoutParams(paramsExample);
}

LayoutParamsにはさまざまな種類の利用可能なクラスがあることに気付き、LinearLayout.LayoutParams、TableView.LayoutParams、RelativeLayout.LayoutParams、LayoutParamsだけで遊んでいます...どちらを試しても、 「setLayoutParams」は、TextView全体を削除します。私はここでフォーラムを精査しましたが、答えはまったく見つかりませんでした。これは珍しいことではありません。

4

3 に答える 3

115

まあ、それは苦痛でしたが、私はついにそれを理解しました。覚えておくべき最も重要なこと(私が今気付いた)は、無数のすべての中LayoutParamsで、実際のビューではなく、作業しているビューの親に関連するものを使用する必要があるということです。

だから私の場合、TextViewマージンを機能させようとしていましたが、それはの中に入れられていましたTableRow。簡単な変更の1つはLayoutParams、使用されているタイプがTableRow次のタイプであることを確認することでした。

private void buildTextView(){   
    // the following change is what fixed it
    TableRow.LayoutParams paramsExample = new TableRow.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT,1.0f);
    txtviewExample.setId(textViewExampleID);
    txtviewExample.setBackgroundResource(R.drawable.textview_9patch_white);
    txtviewExample.setGravity(Gravity.CENTER);
    txtviewExample.setTextColor(getResources().getColor(android.R.color.black));
    paramsExample.setMargins(20, 20, 20, 20);
    txtviewExample.setPadding(20, 20, 20, 20);
    txtviewExample.setTextSize(40); 
    txtviewExample.setText("customExample");
    txtviewExample.setLayoutParams(paramsExample);
}

皆さん、ありがとう。ここのフォーラムで半関連の質問をたくさん見たので、これが将来の誰かに役立つことを願っていますが、実際に問題を定義するものではありません。

于 2012-08-15T14:48:17.867 に答える
1
private TextView txtviewExample = new TextView(this);

private void buildTextView(){   
    LayoutParams paramsExample = new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT,1.0f);
    txtviewExample.setId(textViewExampleID);
    txtviewExample.setBackgroundResource(R.drawable.textview_9patch_white);
    txtviewExample.setGravity(Gravity.CENTER);
    txtviewExample.setTextColor(getResources().getColor(android.R.color.black));
    paramsExample.setMargins(20, 20, 20, 20);
    txtviewExample.setPadding(20, 20, 20, 20);
    txtviewExample.setTextSize(40); 
    txtviewExample.setText("customExample");

   setContentView(txtviewExample);//when you don't use SETTER method for TextView you can't view the desireable text on the UI//
}

//使用する

于 2013-07-24T04:58:01.860 に答える
0

layoutparamsの3番目の変数は何をすることになっていますか、それはアルファですか?コメントアウトするとどうなりますかparamsExample.setMargins

最後に、あなたがあなたを追いかけたらどうなりtxtviewExample.setVisible(View.Visible)ますsetLayoutParamsか?

それらはあなたがしていなかったら私が試みることになるでしょう

于 2012-08-15T02:49:52.330 に答える