更改我的relativelayout内部视图的背景

时间:2013-10-17 12:07:11

标签: android android-layout android-view android-xml android-gridview

我在使用此网格适配器中的项目布局时遇到了问题。

我正在使用caldroid

我在getview中扩充了我的单元格布局:

R.layout.calendar_view_date_cell.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/rlCalendarViewCell"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white1"
 >



<TextView
    android:id="@+id/tvCalendarDayNr"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_centerInParent="true"
    android:gravity="center"
    android:padding="5dp"
    android:text="10"
    android:textSize="20sp" />

<View
    android:id="@+id/vCellBorder"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/selected_border" >
</View>

</RelativeLayout>

我想使用相对布局内的视图作为边框背景。

我正在使用此方法尝试更改单元格的背景(以显示日历的此单元格是已按下的单元格。)

 @Override
 public void onSelectDate(Date date, View view) {
      View vCellBorder = (View) view.findViewById(R.id.vCellBorder);
      vCellBorder.setBackgroundResource(R.drawable.selected_border);

      Toast.makeText(getApplicationContext(), ""+(date),
                    Toast.LENGTH_SHORT).show();


        }

奇怪的是,在我的date_cell预览中,我已经可以看到所选的边框。但是当我运行我的应用程序时,我只看到Relativelayout的背景(color / white1)。

如果我将方法改为:

 @Override
 public void onSelectDate(Date date, View view) {

      view.setBackgroundResource(R.drawable.selected_border);

       Toast.makeText(getApplicationContext(), ""+(date),
                    Toast.LENGTH_SHORT).show();


        }

这在这里有效。但我不想这样,因为我希望能够为布局的不同层改变不同的背景。

2 个答案:

答案 0 :(得分:1)

我怀疑这是因为基类视图不知道如何正确布局。

我会将View更改为ImageView并将其放置在布局中的textview之前,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/rlCalendarViewCell"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/white1"
    >
<ImageView
    android:id="@+id/vCellBorder"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:src="@drawable/selected_border" />

<TextView
    android:id="@+id/tvCalendarDayNr"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_centerInParent="true"
    android:gravity="center"
    android:padding="5dp"
    android:text="10"
    android:textSize="20sp" />

</RelativeLayout>

同样在代码中我会隐藏/取消隐藏视图而不是更改其可绘制的

所以

@Override
public void onSelectDate(Date date, View view) {
  View vCellBorder = (View) view.findViewById(R.id.vCellBorder);
  vCellBorder.setVisibility(View.VISIBLE);

  Toast.makeText(getApplicationContext(), ""+(date),
                Toast.LENGTH_SHORT).show();
}

显然,视图将以GONE或INVISIBLE

开始

答案 1 :(得分:0)

我的观点是获得0dp的宽度和高度。这就是为什么背景没有显示出来的原因。 最后,我将视图更改为线性布局,并将我的textview放在其中。和match_parent现在正在工作。 0dp正在给我提示。