web-dev-qa-db-ja.com

android:TextViewのLayoutParamsは、プログラムでビューを非表示にします

これをさまざまな角度から見ました。基本的にこれは次のとおりです。

プログラムでNEEDSを実行するインターフェイスのテンプレートを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全体をレンダリングします。ここでフォーラムを精査しましたが、その答えはまだ見つかりませんでした。これは珍しいことではありません。

26
Octoth0rpe

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

そのため、私の場合、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);
}

おかげで、うまくいけば、これは他の誰かにとって役に立つことを願っています、私がここでフォーラムで半関連の質問のalotを見ましたが、実際に問題を定義するものではありません。

102
Octoth0rpe
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//
}

//使用する

1
killer

layoutparamsの3番目の変数は何をするはずですか、そのアルファですか? _paramsExample.setMargins_をコメントアウトするとどうなりますか

最後にsetLayoutParamsの後にtxtviewExample.setVisible(View.Visible)にするとどうなりますか?

これらはあなたがしていない場合私がしようとするものになります

0
CQM