Was ich
ich versuchte zu tun versucht, mein ImageButton
‚s layout_gravity
über Java-Code zu setzen, will, dass die Art, wie ich die ImageButton
auf die Art, wie in dem in die orange Rahmen präsentiert wird Abbildung unten:gesetzt Programmatically Image layout_gravity
die Blau Rahmens ist eine vertikale LinearLayout
wirken als „Basis“ Layout und das ist das Layout ich versucht um untergeordnete Layouts hinzuzufügen.
Die orange und Red beide horizontal LinearLayout
.
Das orange Layout ist die Art, wie ich die ImageButton
und die TextView
, dieser setzen will über XML
Das Red Layout ist das Ergebnis, das ich versuchte zu imitieren das orange Layout einrichten über Java-Code.
Der zugehörige Code
Hier ist der XML-Code, den das orange Layout einrichten, dies ist der Effekt ich über Java-Code erreichen will:
<!-- 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>
Hier ist der Java-Code, einrichten des Red Layout
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);
Was ich
Nach einigen zu veröffentlichen, so wie dies bisher versucht habe: Java method for android:layout_gravity Ich versuchte zunächst, zuerst ein FrameLayout
legte meine ImageButton
in dann die params setzte diese FrameLayout
, wie folgt aus:
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);
Aber ich hatte das gleiche Ergebnis wie das oben dargestellte Bild. Später habe ich versucht, auch die LayoutParams
Breite zu verändern only to find the
ImageButton` MATCH_PARENT gestreckt wurde horizontal (Ja, es ist gestreckt)
Dann habe ich versucht, das Verfahren in diesen beiden SO Posts:
How to set layout_gravity programmatically?
How to set a button's parameters programatically
Ihre Methode ist, zuerst eine LinearLayout.Params
einzurichten, wenden Sie dann diese Parameter auf die Schaltfläche an (der Code, den ich in gepostet hat, der verwandte Code Abschnitt wendet diese Methode an). Kurz gesagt ist es:
// 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);
Allerdings war das Ergebnis immer noch das gleiche wie das Bild oben dargestellt.
Frage
Da muß ich programmatisch mehr Kind Blick auf das Blau später Layout hinzufügen, ich frage mich, ob es eine Möglichkeit gibt, jedes Kind Layout wie die orange einen in dem Bild einzurichten?
At Last
fand ich eine Lösung, die auf @Permita ‚s Antwort ganz ähnlich ist.
Hier ist meine Lösung:
LinearLayout.LayoutParams textParams = new LinearLayout.LayoutParams(0, LayoutParams.WRAP_CONTENT);
textParams.weight = 1.0f;
mTextView.setLayoutParams(textParams);
+1 für nette Frage. –