根据android中的属性更改布局

时间:2019-03-30 03:13:31

标签: android android-layout

我在Android Studio中创建了一个自LinearUI继承的自定义UI。本质上,它是带有蓝色半圆角矩形的编辑文本,可以在其中放置文本。

我添加了一个名为borderSide的枚举属性,该属性的值分别为right和left。默认情况下,边框在右侧。我要做的是要有一个条件,即当borderSide离开时,选择了不同的布局,因此蓝色的半圆角矩形位于左侧。搜索之后,我看不到任何简单的方法来完成此操作。

当前,我有这个(很抱歉,如果它有点混乱,它在另一台机器上)

在drawable中,我有两个文件; supplemental_edittextsupplemental_edittext_left。这些是用于不同的按下状态,启用状态和焦点状态的选择器,并选择可绘制对象。左表示选择编辑文本左侧的可绘制集。可绘制对象设置边框和矩形。

布局的基类(ValidLayout)继承LinearLayout,并具有几个错误文本属性。它还夸大了一个简单的布局,其中包含标题和错误文本的两个文本视图。它有一个@override public void addView中添加了edittext的小部件-看起来像这样

@Override
public void addView(View child, int index, ViewGroup.LayoutParams params)
{
    if (child instanced EditText)
    {
         if (editText != null)
             throw new RuntimeException("You can only add 1 child");
         editText = (EditText) child;
         super.addView(child, 1, params);
    }
    else
    {
         super.addView(child, index, params);
    }
}

我在(SupplementEditText)中设置了borderSide属性的类是从基类扩展的,并具有一个名为setBorderSide(int side)的方法。有一个针对edittext的测试(上面创建的),它首先检查它是否为null以及是否没有设置背景。更改代码如下所示:

public void setBorderSide(int side)
{
    if (edittext == null)
       return;
    borderSide = side == 0 ? false : true;
    editText.setBackgroundResource(borderSide ? R.drawable.supplemental_edittext : R.drawable.supplemental_edittext_left);
}

通过setBorderSide方法对Initialise的初始调用。

在xml中,它们像这样工作

<ValidLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/vlEditText"
    app:borderSide="left">
    <SupplementEditText
        android:layout_width="match_content"
        android:layout_height="wrap_content"
        android:id="@+id/sEditText"
        app:supplementTextPosn="end"
        app:supplementText="Hi" />

supplementTextPosn和SupplementalText是SupplementText中的两个属性,用于在基类中创建的半圆角矩形内的EditText的左侧或右侧设置文本和文本位置

尽管有两个问题。首先(这可能很重要),edittext为null。但是,如果我删除了支票,则无论我将borderSide设置为什么,边框始终始终位于左侧。

在AndroidStudio中,有没有一种方法可以测试正在发生的事情以及行为异常的原因以及更多原因,因此可以从supplemental_edittext切换到supplemental_edittext_left

0 个答案:

没有答案