我经常不能强调,我是Android和Java的新手:-) 而这些xml布局让我头疼。
你看到的代码由RelativeLayout中的两个ImageView和两个TextView组成,它们形成了一个布局,对我来说是一个"自定义按钮"。当我将其复制并粘贴到我的布局中时,它几乎按照我想要的方式工作。
每当我需要这样的按钮并且仍然能够更改某些属性(如textviews中的文本)时,如何在我的代码中动态使用xml-layout的这一部分?
我希望你理解我的意思,我的第一语言不是英语。
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="match_parent" >
<ImageView
android:id="@+id/myImageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:layout_marginLeft="10dp"
android:src="@drawable/box" />
<TextView
android:id="@+id/myImageViewText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/myImageView"
android:layout_alignLeft="@+id/myImageView"
android:layout_alignRight="@+id/myImageView"
android:layout_alignTop="@+id/myImageView"
android:layout_margin="1dp"
android:gravity="center"
android:text="S-"
android:textColor="#000000"
android:textStyle="bold" />
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/myImageViewText"
android:layout_centerHorizontal="true"
android:layout_marginBottom="25dp"
android:text="your turn!"
android:textAppearance="?android:attr/textAppearanceSmall" />
<ImageView
android:id="@+id/imageView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/textView1"
android:layout_alignParentTop="true"
android:layout_marginBottom="15dp"
android:layout_marginTop="-10dp"
android:cropToPadding="false"
android:src="@drawable/icon" />
</RelativeLayout>
答案 0 :(得分:3)
好的开始扩展您自己的视图,如下所示:
我在{x}设计的Button
中使用ImageView
和TextView
制作了LinearLayout
:
<强> XML 强>
<merge xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ImageView
android:id="@+id/ivImage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="3dp"
android:adjustViewBounds="true"
android:padding="3dp"
android:scaleType="fitStart" />
<TextView
android:id="@+id/tvText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="2dp"
android:layout_marginLeft="10dp"
android:ellipsize="end"
android:singleLine="true"
android:textColor="@android:color/white" />
</merge>
ViewObject名为
<强> ViewMenuButton 强>
public class ViewMenuButton extends View{
private TextView tvText;
private ImageView ivImage;
public ViewMenuButton(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init();
}
public ViewMenuButton(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public ViewMenuButton(Context context) {
super(context);
init();
}
private void init() {
LayoutInflater inflater = (LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
//here you can inflate a own XML for that View
inflater.inflate(R.layout.view_menubutton, this, true);
this.tvText= (TextView)this.findViewById(R.id.tvText);
this.ivImage = (ImageView)this.findViewById(R.id.ivImage);
}
public void setText(String text){
if(this.tvText != null){
tvText.setText(text);
}
}
//... and so on
}
每当您想在xml中使用它时,请确保为View提供完整的包,如下所示:
使用XML
<com.your.package.views.ViewMenuButton
android:id="@+id/menu_bt_local"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_marginTop="15dp"
android:layout_weight="1"
android:background="@drawable/action_button"
android:textSize="@dimen/text_cell" >
如果你想在代码中使用它,就像这样:
用法JAVA
LinearLayout rootView =
(LinearLayout) findViewById(R.id.mainLayout); //Or sth like this
ViewMenuButton vmb = new ViewMenuButton(this);
rootView.add(vmb);
//or if you already have it in XML
ViewMenuButton vmb = (ViewMenuButton) findViewById(R.id.myVmbtID);
您甚至可以更详细地定义要在XML
中使用的属性,例如设置Image
的来源,更改Text
,更改TextColor
等等{ {3}}
答案 1 :(得分:0)
创建自定义View
子类。在其构造函数中扩展您的布局,在那里找到必要的视图并创建必要属性的setter / getter。然后,每次需要此自定义按钮时,您都可以使用此子类通过代码或xml创建它。如果您还需要能够从xml更改某些属性,则可能需要为自定义视图声明可设置样式的属性。我想你可以找到很多关于如何创建自定义视图的教程。
答案 2 :(得分:0)
您可以对布局进行充气并将其添加到其他布局
RelativeLayout layout = new RelativeLayout(this);
View childButton = getLayoutInflater().inflate(R.layout.child_button, null);
layout.addView(childButton);
现在,您可以在按钮布局中找到子视图
TextView textViewInnerChild = (TextView)childButton.findViewById(R.Id. textInnerView):
然后,您可以更改内部子视图的值或属性
textViewInnerChild.set text("your text")