标签: compound-drawables

固定宽度TextView,带拉伸复合可绘制

我正在尝试实现以下布局:固定宽度TextView对齐到其父级的左侧,其中的文本与TextView的右侧对齐(这就是固定宽度的原因,可以通过其他方式完成吗?)和父母的其余部分填充了一个drawable(简单的线).像这样:截图

它是一个包含2种类型行的ListView,带有行的行的布局非常简单 - 使用TextView和ImageView的LinearLayout(如果需要,我可以稍后发布确切的代码).而且我收到一个警告,它可以用一个带有复合drawable的TextView替换.

我都是为了优化,所以我真的试着遵循这个建议.遗憾的是我没能得到同样的结果 - 该行是约束到的TextView的宽度或文本对齐到列表项的右侧,现在固定的位置.

我错过了什么吗?

编辑:显然它实际上是不可能的,因为还有一些其他的复杂功能(drawable现在是一个水平列表drawable,它不总是一条线,有时它有一个我必须设置的非固定高度)我将离开它现在是 - 线性布局,包含一个TextView和一个ImageView.

layout android textview compound-drawables

5
推荐指数
1
解决办法
1684
查看次数

Android 数据绑定空合并运算符

我正在尝试在数据绑定中使用空合并运算符。我有一个复合可绘制对象,需要显示三个可绘制图标之一,具体取决于变量是 null、true 还是 false。

XML

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">

<data>

    <import type="android.view.View" />

    <variable
        name="dataModel"
        type="com.my.app.MyDataModel" />
</data>

<TextView
    android:id="@id/mCompoundDrawable"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:drawableRight="@{(dataModel.isSelected ? @drawable/selected : @drawable/not_selected) ?? @drawable/not_specified }"
    android:focusable="true"
    android:gravity="center_vertical"
    android:scrollHorizontally="false"
    android:text="@{dataModel.text}" />
</layout>
Run Code Online (Sandbox Code Playgroud)

数据模型

public class MyDataModel
{
    public String text;
    public Boolean isSelected;

    public MyDataModel(String text, Boolean isSelected)
    {
        this.text = text;
        this.isSelected = isSelected;
    }
}
Run Code Online (Sandbox Code Playgroud)

我通过调用以下命令来调用它:

    MyDataModel dataModel = new MyDataModel(text, null);
    binding.setDataModel(dataModel);
Run Code Online (Sandbox Code Playgroud)

我以为

android:drawableRight="@{(dataModel.isSelected ? @drawable/selected : @drawable/not_selected) ?? @drawable/not_specified } 
Run Code Online (Sandbox Code Playgroud)

实际上等同于: …

android compound-drawables android-databinding

5
推荐指数
1
解决办法
2206
查看次数

自定义 AppCompatButton drawableLeft?

如何在下图中放置drawableLeft和按钮AppCompatButton类似的文本?

应用兼容按钮

我试图申请paddingLeft,但文本正在远离可绘制的右侧。

<android.support.v7.widget.AppCompatButton
                android:id="@+id/filterBy"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:drawableLeft="@drawable/ic_btn_filter"
                android:paddingLeft="20dp"
                android:text="@string/filter_by"
                android:textAllCaps="false" />
Run Code Online (Sandbox Code Playgroud)

到目前为止,结果看起来像

在此处输入图片说明

布局

   <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_below="@id/profileHeader"
            android:layout_marginLeft="5dp"
            android:layout_marginRight="5dp"
            android:layout_marginTop="10dp">

            <android.support.v7.widget.AppCompatButton
                android:id="@+id/findFriends"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:drawableLeft="@drawable/ic_btn_search"
                android:text="@string/find_friends"
                android:textAllCaps="false" />

            <android.support.v7.widget.AppCompatButton
                android:id="@+id/filterBy"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:drawableLeft="@drawable/ic_btn_filter"
                android:text="@string/filter_by"
                android:textAllCaps="false" />
      </LinearLayout>
Run Code Online (Sandbox Code Playgroud)

以及使事情变得清晰的解释性要求。

使用layout_weight属性 am 调整两个按钮的宽度,我必须做的是,文本应该在按钮的中心,drawable 应该在文本的左侧附近对齐。

请问有什么建议吗?

android button android-appcompat compound-drawables

4
推荐指数
1
解决办法
5172
查看次数

在事件上显示复合drawable到EditText

在我的活动应用程序,我想设置EditText为我点击里面(焦点)的EditText和类型清除的关键button 应该出现在右侧EditText
当EditText上为空时清除按钮都去掉.
但它没有向我展示..
我应该在这里实施哪个事件..?onTouch或者onFocusChange或者addTextChangedListener还有什么代码......?以下代码我在活动中完成了......

在活动中:

 clear = getResources().getDrawable(R.drawable.round_clear);
     clear.setBounds(0, 0, clear.getIntrinsicWidth(), clear.getIntrinsicHeight());
Run Code Online (Sandbox Code Playgroud)

和事件

@Override
public void onFocusChange(View v, boolean hasFocus) 
{
    switch (v.getId()) 
    {
        case R.id.uIDEditText:
                if(hasFocus && !uIDEditText.getText().toString().isEmpty())
                     uIDEditText.setCompoundDrawables(null, null, clear, null);                 
                else
                     uIDEditText.setCompoundDrawables(null, null, null, null);
            break;

        case R.id.pwdEditText:
                if(hasFocus && !pwdEditText.getText().toString().isEmpty())
                    pwdEditText.setCompoundDrawables(null, null, clear, null);
                else
                    pwdEditText.setCompoundDrawables(null, null, null, null);

            break;          
    }               
}
Run Code Online (Sandbox Code Playgroud)


另一个事件是:


@Override
public boolean onTouch(View v, MotionEvent event) 
{
    switch (v.getId()) 
    { …
Run Code Online (Sandbox Code Playgroud)

android android-edittext compound-drawables

3
推荐指数
1
解决办法
5353
查看次数

尝试在空对象引用上调用虚拟方法“android.graphics.Rect android.graphics.drawable.Drawable.getBounds()”

我有以下代码:

etEmail.setOnTouchListener((view, motionEvent) -> {
    final int DRAWABLE_RIGHT = 2;
    if (motionEvent.getAction() == MotionEvent.ACTION_UP) {
        if(motionEvent.getRawX() >= (etEmail.getRight() - etEmail.getCompoundDrawables()[DRAWABLE_RIGHT].getBounds().width())) {
            Utils.getInstance().showPopup("...",MainActivity.this,null);
            return true;
        }
    }
    return false;
});
Run Code Online (Sandbox Code Playgroud)

虽然通常它似乎有效,但我突然收到一份崩溃报告说:

尝试在空对象引用上调用虚拟方法“android.graphics.Rect android.graphics.drawable.Drawable.getBounds()”

适用品牌:小米,型号:Redmi Note 6 Pro,Android:9。

这里有人知道什么会导致可绘制对象“消失”或被视为空吗?

XML 布局:

    <EditText
        android:id="@+id/etEmail"
        tools:ignore="Autofill"
        android:inputType="textEmailAddress"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:drawableEnd="@drawable/ic_info"
        android:paddingEnd="12dp"
        android:paddingStart="10dp"
        android:textAppearance="@style/TextAppearance.AppCompat.Medium" />
Run Code Online (Sandbox Code Playgroud)

android compound-drawables

3
推荐指数
1
解决办法
7516
查看次数