Füllen Sie die Ansicht programmgesteuert auf

235

Ich entwickle Android v2.2 App.

Ich habe ein Fragment .

Beim onCreateView(...)Rückruf meiner Fragmentklasse füge ich dem Fragment ein Layout wie folgt hinzu:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.login, null);

    return view;
}

Die oben aufgeblasene Layoutdatei lautet (login.xml):

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" 
 >

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Username" />


    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Username" />

</LinearLayout>

Ich möchte ein paddingTopauf das obige <LinearLayout>Element setzen, und ich möchte es im Java- Code tun, anstatt es in XML zu tun.

Wie stellt man paddingTopauf <LinearLayout>in meinem Fragment Java - Klasse Code ??

Leem.fin
quelle
2
Sie müssen Ihrem LinearLayout eine ID zuweisen, damit Sie sie finden findViewByIdund dann aufrufen setPaddingkönnen.
Aleks G
@AleksG Im Allgemeinen ja, aber da das LinearLayout das Stammelement der aufgeblasenen Hierarchie ist, ist dies hier nicht erforderlich. viewist bereits das LinearLayout, in diesem Fall muss es nicht erneut gefunden werden. Angesichts dessen ist dies jedoch etwas Besonderes.
1
@alextsc: Ja, stimme zu. Trotzdem ziehe ich es vor, IDs für alles zuzuweisen, auf das ich mich in der Anwendung beziehen kann.
Aleks G

Antworten:

485

view.setPadding(0,padding,0,0);

Dadurch wird die obere Polsterung auf padding-pixel gesetzt.

Wenn Sie es dpstattdessen einstellen möchten , können Sie eine Konvertierung durchführen :

float scale = getResources().getDisplayMetrics().density;
int dpAsPixels = (int) (sizeInDp*scale + 0.5f);
Jave
quelle
6
@ Leem.fin wie Chris sagt, es sind Pixel. Wenn Sie dp wollen, müssen Sie die Konvertierung manuell durchführen:float scale = getResources().getDisplayMetrics().density; int size = (int) (sizeInPx*scale + 0.5f);
Jave
7
Woher kommt der 0.5f?
Herr von Wurst
11
@Georg Dieser Code stammt von hier: developer.android.com/guide/practices/… Die 0,5 wird verwendet, um beim Casting die nächste Ganzzahl zu erhalten (anstatt Math.round () zu verwenden)
Jave
Ich denke, die Variablennamen sollten umgekehrt sein: Ist sizeInDpeigentlich die Anzahl der Pixel, die Sie beim Konvertieren von sizeInPxdps erhalten.
Friederbluemle
98

So beantworten Sie Ihre zweite Frage:

view.setPadding(0,padding,0,0);

Wie von SpK und Jave vorgeschlagen, wird die Auffüllung in Pixel festgelegt. Sie können es in dp einstellen, indem Sie den dp-Wert wie folgt berechnen:

int paddingDp = 25;
float density = context.getResources().getDisplayMetrics().density
int paddingPixel = (int)(paddingDp * density);
view.setPadding(0,paddingPixel,0,0);

Hoffentlich hilft das!

Chris Conway
quelle
3
Natürlich wird dies wie erwartet kompiliert und funktioniert, aber aus Gründen der Klarheit sollten Sie die Benennung Ihrer int-Variablen ändern. Weil Sie Ihre Auffüllung in DP definieren und berechnen, was es für dieses bestimmte Gerät in Pixel sein würde.
Glenn85
Sie konvertieren dp in Pixel. Die Variablennamen sind verwirrend. "paddingPixel" bedeutet wirklich
dp
92

Wenn Sie das Auffüllen in Ressourcendateien speichern, können Sie einfach aufrufen

int padding = getResources().getDimensionPixelOffset(R.dimen.padding);

Es macht die Konvertierung für Sie.

Miklos Jakab
quelle
18

Mit Kotlin und der android-ktx-Bibliothek können Sie dies einfach tun

view.updatePadding(top = 42)

Siehe Dokumente hier

Andrew Orobator
quelle
14

Sie können das Auffüllen Ihrer Ansicht festlegen, indem Sie den folgenden Code programmgesteuert verwenden.

view.setPadding(0,1,20,3);

Und es gibt auch verschiedene Arten von Polsterung -

Polsterung

PaddingBottom

PaddingLeft

PaddingRight

PaddingTop

Diese Links verweisen auf die Website der Android-Entwickler. Hoffe das hilft dir sehr.

Praveenkumar
quelle
@ Leem.fin Schauen Sie sich diese an, Sie werden den Unterschied erkennen können.
Praveenkumar
9

Die Verwendung TypedValueist eine viel sauberere Methode zum Konvertieren in Pixel im Vergleich zur manuellen Berechnung:

float paddingDp = 10f;
// Convert to pixels
int paddingPx = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, paddingDp, context.getResources().getDisplayMetrics());
view.setPadding(paddingPx, paddingPx, paddingPx, paddingPx);

TypedValue.applyDimensionKonvertiert im Wesentlichen die gewünschte Auffüllung entsprechend den Anzeigeeigenschaften des aktuellen Geräts in Pixel.

Weitere Informationen finden Sie unter: TypedValue.applyDimension Docs .

i2097i
quelle
1
sollten px und dp nicht umgekehrt werden?
chris838
Ich denke, der Kern meiner Arbeit ist richtig. Die Benennung ist jedoch verwirrend, denke ich. Ich werde es bearbeiten, um klarer zu sein. Danke für die Rückmeldung.
i2097i
7

Verwenden Sie die folgende Methode, um das Auffüllen dynamisch einzustellen

setPadding(int left, int top, int right, int bottom)

Beispiel:

view.setPadding(2,2,2,2);
Sai Gopi N.
quelle
3

Schreiben Sie den folgenden Code, um die Polsterung festzulegen. Dies kann Ihnen helfen.

TextView ApplyPaddingTextView = (TextView)findViewById(R.id.textView1);
final LayoutParams layoutparams = (RelativeLayout.LayoutParams) ApplyPaddingTextView.getLayoutParams();

layoutparams.setPadding(50,50,50,50);

ApplyPaddingTextView.setLayoutParams(layoutparams);

Verwenden Sie LinearLayout.LayoutParamsoder RelativeLayout.LayoutParamsentsprechend dem übergeordneten Layout der untergeordneten Ansicht

Manikandan K.
quelle
setPadding () ist keine über LayoutParams zugängliche Methode. Ich bin mir nicht sicher, ob es jemals war.
Sriram
2
Context contect=MainActivity.this;
TextView tview=new TextView(context);
tview.setPaddingRelative(10,0,0,0);
Siddhartha Halder
quelle
4
Vielen Dank für dieses Code-Snippet, das möglicherweise nur begrenzte und sofortige Hilfe bietet. Eine richtige Erklärung würde ihren langfristigen Wert erheblich verbessern, indem sie zeigt, warum dies eine gute Lösung für das Problem ist, und es für zukünftige Leser mit anderen, ähnlichen Fragen nützlicher machen. Bitte bearbeiten Sie Ihre Antwort, um eine Erklärung hinzuzufügen, einschließlich der von Ihnen getroffenen Annahmen.
Steinbock
0

Konvertieren Sie beim programmgesteuerten Auffüllen in dichtebezogene Werte, indem Sie Pixel in Dp konvertieren.

Bhagya
quelle