web-dev-qa-db-de.com

programmgesteuerte Einstellung einer TextView-Höhe

Ich möchte eine TextView-Höhe zurücksetzen, nachdem ich sie dem Hauptfenster in der XML-Datei hinzugefügt habe.

in einem RelativeLayout, 

  <TextView
      Android:id="@+id/text_l"
      Android:layout_width="50sp"
      Android:layout_height="50sp"
      Android:layout_alignParentTop="true"
      Android:layout_centerHorizontal="true"
      Android:layout_marginLeft="10sp"
      Android:layout_marginTop="145dp"
      Android:gravity="center"
      Android:textAppearance="?android:attr/textAppearanceLarge"
      Android:textColor="#000000" >
  </TextView>

Ich möchte es nur von 50 auf 70 ändern:

Ich habe es versucht:

 TextView text = (TextView)findViewById(R.id.text_l);
 text.setHeight(70);

aber nichts hat sich geändert.

33
Q8yDev

Sie sollten es über LayoutParams ändern:

LayoutParams params = (LayoutParams) textView.getLayoutParams();
params.height = 70;
textView.setLayoutParams(params);

EDIT

Sie sollten in Ihrem Code keine Größen in Pixeln verwenden. Verwenden Sie dazu Dimensionen:

dimens.xml:

<dimen name="text_view_height">50dp</dimen>

In Code:

params.height = getResources().getDimensionPixelSize(R.dimen.text_view_height);
89
Jin35

Pragmatisch können Sie die Höhe der Textansicht wie folgt einstellen:

private TextView mTxtView;
int height = 50; //your textview height
mTxtView.getLayoutParams().height = height;
10
Dhruv Raval

sie können Breite und Höhe der Textansicht dynamisch einstellen 

private TextView mTxtView;
private int screenWidth, screenHeight;
Display display = getWindowManager().getDefaultDisplay(); 
    screenWidth = display.getWidth();
    screenHeight = display.getHeight();


LayoutParams params = mTxtView.getLayoutParams();
    params.width = screenWidth-30;
    mTxtView.setLayoutParams(params);
4
Rajeev Kashyap

Ich weiß, dass dies eine alte Frage ist, aber für andere, die dies finden könnten, gibt es Szenarien, in denen Sie nach dem Ändern der Layout-Parameter textView.requestLayout () aufrufen sollten. Es kann gut sein, es wegzulassen, wenn Sie einfach die Layout-Parameter einmalig ändern, bevor das Layout gezeichnet wird. In meinem Fall wollte ich den Höhenparameter einer TextView basierend auf einer Auswahl eines Optionsfelds mithilfe von onCheckedChangedListener ändern. Die TextView-Höhe würde jedoch nur beim ersten Zeichnen aktualisiert. Durch das Hinzufügen von requestLayout () wurde dieses Problem behoben.

TextView tv;
ViewGroup.LayoutParams params = tv.getLayoutParams();
params.height = ViewGroup.LayoutParams.WRAP_CONTENT;
if(!tv.isInLayout()) {//make sure it isn't currently in a layout pass 
    tv.requestLayout();//request a layout pass
 }
0
smitty1

In Kotlin mit DP in Pixel Übersetzung

  changeTextHeight.setOnClickListener { view ->

         // random height for testing
        val randomHeightInDP = Random().nextFloat() * (50.0f - 10.0f) + 10

        // set Height in pixels
        hello.layoutParams.height = convertDpToPixel(randomHeightInDP, applicationContext)
         //refresh layout
        hello.requestLayout()


    }

Konvertiere DP in Pixel, siehe diesen Beitrag :

fun convertDpToPixel(dp: Float, context: Context): Int {
        return (dp * (context.resources.displayMetrics.densityDpi.toFloat() / DisplayMetrics.DENSITY_DEFAULT)).toInt()
    }
0
Hitesh Sahu