Quello che ho cercato di fare
Ho cercato di impostare l' layout_gravity
tramite codice Java miei ImageButton
, il modo in cui voglio il ImageButton
da si presenta come il modo in cui all'interno del arancione fotogramma del figura:programmazione set ImageButton layout_gravity
il Blu telaio è un atto LinearLayout
verticale come un formato "base" e questo è il layout ho provato aggiungere i layout figlio a.
Il arancione e Red sono entrambi orizzontale LinearLayout
.
Il arancione il tracciato è il modo in cui voglio mettere il ImageButton
e la TextView
, questo è impostato tramite XML
The Red layout di è il risultato ho cercato di imitare il layout di Arancione tramite codice Java.
il relativo codice
Ecco il codice XML che ha istituito il layout di Arancione, questo è l'effetto che voglio raggiungere tramite codice Java:
<!-- Begin the Orange Layout -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/info_left_padding"
android:layout_marginRight="@dimen/info_right_padding" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:gravity="center_vertical"
android:minHeight="@dimen/detail_min_line_item_height"
android:text="TextView" />
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<ImageButton
android:id="@+id/imageButton1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right|center_vertical"
android:adjustViewBounds="true"
android:maxHeight="@dimen/abs__action_bar_default_height"
android:scaleType="fitCenter"
android:src="@drawable/navigation_cancel" />
</FrameLayout>
</LinearLayout>
Ecco il codice Java che impostare il layout Red
int textHeight = (int)getResources().getDimension(R.dimen.detail_min_line_item_height);
int imgHeight = (int)getResources().getDimension(R.dimen.abs__action_bar_default_height);
TextView mTextView = new TextView(this);
ImageButton mDeleteButton = new ImageButton(this);
// Set Delete Button Padding
// mDeleteButton.setPadding(buttonPadding, buttonPadding, buttonPadding, buttonPadding);
// Set Imagebutton Scale type as fitCentre
mDeleteButton.setScaleType(ScaleType.FIT_CENTER);
// Set AdjustViewBounds
mDeleteButton.setAdjustViewBounds(true);
// Set max height of the image
mDeleteButton.setMaxHeight(imgHeight);
// Set the text appearance to be "large"
mTextView.setTextAppearance(this, android.R.style.TextAppearance_Large);
mTextView.setText(text);
// Set the minimum height of this textview
mTextView.setMinHeight(textHeight);
// Set the content of the textview to be centred
mTextView.setGravity(Gravity.CENTER_VERTICAL);
// Set the ImageButton's background image
mDeleteButton.setImageResource(R.drawable.navigation_cancel);
LinearLayout.LayoutParams hParams = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
LinearLayout hLayout = new LinearLayout(this);
// Set Margins
hParams.leftMargin = (int) getResources().getDimension(R.dimen.info_left_padding);
hParams.rightMargin = (int) getResources().getDimension(R.dimen.info_right_padding);
hParams.bottomMargin = (int) getResources().getDimension(R.dimen.text_layout_margin);
hLayout.setLayoutParams(hParams);
// Set orientation to horizontal
hLayout.setOrientation(LinearLayout.HORIZONTAL);
// The settings below is actually setting up some of the button's parameters
LinearLayout.LayoutParams buttonParams = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
buttonParams.gravity = Gravity.RIGHT;
mDeleteButton.setLayoutParams(buttonParams);
hLayout.addView(mTextView);
hLayout.addView(mDeleteButton);
layout_blue.addView(hLayout);
Quello che ho provato finora
Secondo alcuni SO post come questo: Java method for android:layout_gravity Inizialmente ho cercato di mettere prima la mia ImageButton
in un FrameLayout
quindi impostare le params di questo FrameLayout
, come questo:
FrameLayout buttonFrame = new FrameLayout(this);
FrameLayout.LayoutParams buttonParams = new FrameLayout.LayoutParams(android.widget.FrameLayout.LayoutParams.WRAP_CONTENT,
android.widget.FrameLayout.LayoutParams.WRAP_CONTENT,
Gravity.RIGHT | Gravity.CENTER_VERTICAL);
buttonFrame.setLayoutParams(buttonParams);
buttonFrame.addView(mDeleteButton);
Ma ho avuto lo stesso risultato dell'immagine presentata sopra. Più tardi ho anche provato a cambiare la larghezza LayoutParams
a MATCH_PARENT only to find the
ImageButton` è stato allungato in orizzontale (Sì, è allungato)
Poi ho provato il metodo pubblicato in questi due SO messaggi:
How to set layout_gravity programmatically?
How to set a button's parameters programatically
il loro metodo è quello di istituire un LinearLayout.Params
prima, quindi applicare questo params al pulsante (il codice che ho scritto in la sezione Codice correlati applica questo metodo). In breve è:
// The settings below is actually setting up some of the button's parameters
LinearLayout.LayoutParams buttonParams = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
buttonParams.gravity = Gravity.RIGHT;
mDeleteButton.setLayoutParams(buttonParams);
Tuttavia, il risultato è stato sempre lo stesso come l'immagine presentata in precedenza.
Domanda
Da quando ho bisogno di aggiungere a livello di codice più viste bambino al Blue layout di tardi, mi chiedo se c'è un modo per impostare ogni layout bambino come il arancione uno nell'immagine?
At Last
ho trovato una soluzione che è abbastanza simile alla risposta @Permita s'.
Ecco la mia soluzione:
LinearLayout.LayoutParams textParams = new LinearLayout.LayoutParams(0, LayoutParams.WRAP_CONTENT);
textParams.weight = 1.0f;
mTextView.setLayoutParams(textParams);
+1 per bella domanda. –