如何以编程方式设置TextView的边框颜色?

时间:2019-01-03 11:52:29

标签: android xml android-layout

我正在尝试根据自己活动中的TextView条件,以编程方式更改if的边框颜色。这是我的ViewContact.java代码:

if (bob == 0) {
  //change colour depending on value

  LayerDrawable layerDrawable = (LayerDrawable) ContextCompat
      .getDrawable(ViewContact.this,R.drawable.textboxes);
  GradientDrawable gradientDrawable = (GradientDrawable) layerDrawable
      .findDrawableByLayerId(R.id.textbox_shape);
  gradientDrawable.setColor(Color.parseColor("#DA850B")); // change color
}

if (bob == 1) {

  LayerDrawable layerDrawable = (LayerDrawable) ContextCompat
      .getDrawable(ViewContact.this,R.drawable.textboxes);
  GradientDrawable gradientDrawable = (GradientDrawable) layerDrawable
      .findDrawableByLayerId(R.id.textbox_shape);
  gradientDrawable.setColor(Color.parseColor("#0A7FDA")); // change color

}

if (bob == 2) {

etc...

}

我已经在Changing color in a shape inside a layer-list programmatically和这里Android change color stroke (border) programmatically及其他地方寻找解决方案,但是无法正常工作。

你能帮忙吗?

这里是xml活动TextViewViewContact.java的{​​{1}}:

activity_view_contact.xml

这是 <TextView android:id="@+id/textView1" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight=".5" android:background="@drawable/textboxes" />

textboxes.xml

3 个答案:

答案 0 :(得分:1)

您要更改描边颜色(边框):

GradientDrawable gradientDrawable = (GradientDrawable)btn_submit.getBackground();
gradientDrawable.setStroke(2, Color.GREEN);

它有效..检查一次..

答案 1 :(得分:1)

您正在更改要加载的可绘制对象的颜色,但不能更改TextView中使用的可绘制对象的颜色。将以下行添加到您的代码中,以在TextView中设置背景可绘制内容:

findViewById(R.id.textView1).setBackground(layerDrawable);

您还可以直接通过{p>获取TextView的背景

LayerDrawable layerDrawable = (LayerDrawable) findViewById(R.id.textView1).getBackground();

这是一组用于更改背景和笔触颜色的代码:

LayerDrawable layerDrawable = (LayerDrawable) findViewById(R.id.textView1).getBackground();
GradientDrawable gradientDrawable = (GradientDrawable) layerDrawable
    .findDrawableByLayerId(R.id.textbox_shape);
// Change background color
gradientDrawable.setColor(Color.parseColor("#DA850B"));
// Change stroke color. (Assumes 5px stroke width.)
gradientDrawable.setStroke(5, Color.parseColor("#FF0000"));

答案 2 :(得分:0)

TextView-以XML或代码添加边框

Android Studio 3.5.2的步骤-在Android 9 Pie上运行的应用

创建新的可绘制对象

  • 在项目树中

  • 打开 res 文件夹

  • 打开可绘制文件夹

  • 右键单击可绘制

  • 选择新建> 可绘制资源文件

  • 出现新资源屏幕

  • 输入名称

  • textview_border.xml

  • 不理会所有其他选项

  • 确定

创建默认可绘制对象

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

</selector>

用此,但保留由Android Studio生成的确切名称空间-如果与以下内容不同:

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

    <!--FILL    -->
    <solid android:color="#fafbfb" />

    <!--    BORDER-->
    <stroke android:width="1dp"
            android:color="#FFFFFF" />

</shape>

您现在可以将此可绘制形状用作背景

提供任何textview

在这里,我们将背景颜色设置为XML中的Android系统颜色为白色

android:background="@android:color/white"

<TextView
        android:id="@+id/textView1"
        android:layout_width="0dp"
        android:layout_height="16dp"
        android:layout_marginTop="8dp"
        android:layout_marginEnd="8dp"
        android:background="@android:color/white"
        android:text="SOME TEXT"
        android:textAlignment="center"
        android:textColor="@color/colorAppColorAppDark0"
        android:textSize="@dimen/app_textSize_mediumToSmall"
       .../>

现在我们可以改用drawable

android:background="@drawable/textview_border"

<TextView
        android:id="@+id/textView1"
        android:layout_width="0dp"
        android:layout_height="16dp"
        android:layout_marginTop="8dp"
        android:layout_marginEnd="8dp"
        android:background="@drawable/textview_border"
        android:text="SOME TEXT"
        android:textAlignment="center"
        android:textColor="@color/colorAppColorAppDark0"
        android:textSize="@dimen/app_textSize_mediumToSmall"
       ..layout commands etc./>

或者您可以通过编程方式添加

TextView textView1 = activity.findViewById(R.id.textView1);

//--------------------------------------------------------------------------------------
//see res/drawable/textview_border.xml
textView1.setBackgroundResource(R.drawable.textview_border);

在XML-设计模式下将背景设置为可绘制

  • 在设计模式下

  • 列表项

  • 单击您的textView

  • 在“声明的属性”中查找背景,或向下滚动至“所有属性”以添加背景。
  • 在该行的最右边,单击字段右侧的小条
  • 出现背景选择器屏幕
  • 在左侧选择类型:可绘制而不是颜色
  • 查找textview_border
  • 按“确定”

enter image description here

设置 android:background =“ @ drawable / textview_border”

<TextView
        android:id="@+id/fixture_list_constraintlayout_textView_fixturetypecode"
        android:layout_width="30dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:layout_marginEnd="8dp"
        android:background="@drawable/textview_border"
        android:text="XXX"
        android:textAlignment="center"
        android:textColor="@android:color/white"
        android:textSize="@dimen/app_textSize_mediumToSmall"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toTopOf="parent" />