- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
I have the following Layout named
sample_layout.xml
and I want to use it multiple times but each time with a few changes.<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_marginBottom="20dp">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="110dp"
android:background="@drawable/full_panel_blue"
android:padding="10dp"
android:layout_marginBottom="20dp">
<ImageView
android:layout_width="120dp"
android:layout_height="120dp"
android:src="@mipmap/first_icon" />
<LinearLayout
android:layout_width="350dp"
android:layout_height="fill_parent"
android:layout_alignParentRight="true"
android:gravity="end"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="@color/my_white"
android:text="4000000"
android:textSize="50sp"
android:gravity="end"/>
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="end"
android:textColor="@color/my_white"
android:textSize="20sp"
android:text="Sample text" />
</LinearLayout>
</RelativeLayout>
</LinearLayout>Lower is the layout where it will be included multiple times
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<include layout="@layout/sample_layout"/>
<include layout="@layout/sample_layout"/>
<include layout="@layout/sample_layout"/>
</LinearLayout>So, I want to include it first time just as it is, but the second time instead of the
@drawable/full_blue_panel
, I want to use another drawable (@drawable/red_w_transparency
). And also for theImageView
I want to use anothersrc
for the icon second time, and another one the third time. Maybe different text in theTextView
each time and so on for any of the previously created attributes. I already tried something with DataBinding but I don't think it is exactly suitable for this. Is there any other way to this?
最佳答案
一般来说,我通过创建自定义 View
来解决这类问题。子类。此处介绍了基础知识:https://developer.android.com/guide/topics/ui/custom-components.html#compound
简短的版本是您定义一些影响您要更改的部分的自定义属性,然后创建一个 View
读取这些属性以修改其 View 层次结构的子类实现。
在您发布的示例中,您有以下相关要点:
LinearLayout
RelativeLayout
背景ImageView
来源TextView
正文您可以在 attrs.xml
中创建这些属性:
<declare-styleable name="MyCompoundComponent">
<attr name="background"/>
<attr name="imageSrc"/>
<attr name="primaryText"/>
</declare-styleable>
接下来,您将创建您的 View 类。由于您的原始布局的根是 LinearLayout
,我们将从中得出:
public class MyCompoundComponent extends LinearLayout {
public MyCompoundComponent(Context context, AttributeSet attrs) {
super(context, attrs);
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.MyCompoundComponent);
// read your attributes
a.recycle();
inflate(context, R.layout.my_compound_component, this);
// find your views, use your attributes to modify them
}
}
当然,您需要布局。您可以只使用上面发布的那个,除非您将根元素更改为 <merge>
现在你在 LinearLayout
里面给它充气了.
有了所有这些,您就可以在其他布局中使用此 View ,就像使用任何其他 View 一样:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<com.example.stackoverflow.MyCompoundComponent
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:background="@color/blue"
app:imageSrc="@drawable/image1"
app:primaryText="@string/text1"/>
<com.example.stackoverflow.MyCompoundComponent
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:background="@color/red"
app:imageSrc="@drawable/image2"
app:primaryText="@string/text2"/>
</LinearLayout>
关于android - 除了DataBinding之外,还有其他方法可以在Android Studio中多次使用具有不同属性的相同布局吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46982922/
我正在尝试在 android 中学习 ViewModel,在我的第一阶段学习中,我正在尝试使用 ViewModel 和 DataBinding 来更新 UI(TextView)。在 ViewModel
在 ASP.NET 中,您可以单独绑定(bind)控件(即 GridView1.DataBind() ),也可以调用 Page.DataBind()绑定(bind)页面上的所有控件。 这两个调用之间有
如何使用新的 dataBinder 插件进行双向绑定(bind)(从 UI 到数据以及从数据到 UI)? 非常感谢! 最佳答案 我们还没有这个,也许在 v1 之后。不确定您的用例是什么,但我们已经为每
我正在尝试将 Kotlin 与 DataBinding 一起使用,但我遇到了这个错误: Error:[kapt] An exception occurred: java.lang.annotation
我只是将我的项目转换为 androidX 并成功构建项目。但是当我想运行那个时间时,它在启用了 java 的 android studio 3.5.3 中创建了这个错误。 这是我的项目 gradle:
这个问题在这里已经有了答案: no cached version available for offline mode (11 个回答) 2年前关闭。 无法确定任务的依赖关系 :app:compile
这是一个与今天无关的老问题。请参阅 Android 开发人员的说明。与四年前相比,现在将数据绑定(bind)应用于您的项目要容易得多。 我正在阅读 https://developer.android.
异常(exception)情况如下: java.lang.NullPointerException: Attempt to read from field 'java.lang.Runnable an
构建项目时收到以下警告 DSL element 'android.dataBinding.enabled' is obsolete and has been replaced with 'androi
今天升级Android Studio 2.3后,构建项目失败。 当构建项目 gradle console 显示这个错误: FAILURE: Build failed with an exception
我有一个消息列表,我将这些消息的模板绑定(bind)到单击事件中,然后在该模板内,我有一个超链接绑定(bind)到 js 函数,该函数应该打开一个 mailto 页面。 但是,尽管 js 函数执行,但
我在 Wildfly 8.2.1 和 Glassfish 4.1 中使用 Spring Data JPA 部署 Spring MVC 应用程序时遇到问题(它在 Wildfly 10 中工作,但我不允许
我为横向创建了一个替代布局 XML 文件。使用 DataBindingUtil 的填充在纵向模式下工作正常,但在加载自定义 XML 文件时在横向模式下崩溃。 使用数据绑定(bind)的布局膨胀: cl
数据绑定(bind)到控件的可见属性时是否存在任何已知问题? 无论我的属性是什么,该控件始终不可见。 Public ReadOnly Property IsRibbonCategory() As Bo
使用数据绑定(bind),如何绑定(bind)使用值类型的新对象? 简单的例子: public class Person() { private string _firstName;
我有一个 Image 控件,它的源绑定(bind)到对象上的属性(字符串 url 到图像)。进行服务调用后,我使用新 URL 更新数据对象。在调用 PropertyChanged 事件后,它离开我的代
我想在传入的绑定(bind)整数上添加一个常量值。事实上,我有几个地方想要绑定(bind)到相同的源值但添加不同的常量。所以理想的解决方案是这样的...... (注意:这是一个展示这个想法的例子
我正在开发一个 Windows Phone 应用程序。我将 List 绑定(bind)到内容控制元素。 在转换器中,我返回指定参数的字符串。
天哪!我讨厌这个。为什么这么复杂? 我正在尝试做的事情: 我有一个包含多个用户控件的表单,每个控件都有一个数据网格。每个网格通过 .ItemSource 属性与 ObservableCollectio
我正在使用数据绑定(bind)并且我已经声明了 lateinit var对于绑定(bind)以及当我要去不同的 fragment Leaky canary 显示泄漏时。 fragment class
我是一名优秀的程序员,十分优秀!