Android: LayoutParams для TextView делает вид исчезающим, программным

Я ударил это с разных ракурсов. В основном суть такова:

Я выложил шаблон в XML для интерфейса, который НЕОБХОДИМО запускать программно, поэтому он будет динамически заполняться во время прогона.

Проблема здесь заключается в том, что XML TextView имеет довольно много настроек макета (которые работают) и необходимы. Но если я действительно установил их в коде, TextView даже не появится.

(TextView, кстати, вложен внутри TableRow, таким образом, вызов веса). Сначала созданный мной 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 ушедшим. Я просмотрел форумы здесь и не нашел ответа. Это не может быть ЧТО необычно.

Ответ 1

Ну, это было больно, но я, наконец, понял это. Самое главное, что я помню (что я только понял), - это все мириады LayoutParams, вам нужно использовать тот, который относится к PARENT вида, над которым вы работаете, а не фактический вид.

Итак, в моем случае я пытался получить поля TextView, но он помещался внутри TableRow. Одно простое изменение заключалось в том, чтобы использовать тип 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);
}

Спасибо, ребята, надеюсь, это пригодится кому-то еще по этой линии, так как я видел много полу связанных вопросов на форумах здесь, но не тот, который действительно определяет проблему.

Ответ 2

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

//использование

Ответ 3

Какова 3-я переменная в layoutparams, которая должна делать, это альфа? что произойдет, если вы закомментируете paramsExample.setMargins

наконец, что произойдет, если вы txtviewExample.setVisible(View.Visible) после setLayoutParams?

Это были бы те вещи, которые я попытался бы, если вы не