我有一个来自GridView日历的单元格的布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/custom_cell"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/cell_bg"
android:gravity="center"
android:orientation="vertical"
android:paddingLeft="10dp">
<LinearLayout
android:id="@+id/shape_background"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical">
<TextView
android:id="@+id/tv1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"/>
<TextView
android:id="@+id/tv2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"/>
</LinearLayout>
</LinearLayout>
我正在以编程方式设置一个标记为android:id="@+id/shape_background
的线性布局的可绘制背景。我插入这个布局只是因为我不想要与父LinearLayout的大小相关的扭曲。你注意到我里面有2个文本视图。如果布局宽度和高度是wrap_content,我的背景会缩小到textviews内容的大小。当我设置为match_parent时,我旋转时在形状背景上发生扭曲。
下面是创建drawable及其初始化的简单代码。
public CalendarAdapter( Context context, int month, int year,
Map<String, Object> caldroidData,
Map<String, Object> extraData, int cellHeight) {
super(context, month, year, caldroidData, extraData);
this.cellHeight = (int)Math.floor( ( cellHeight - ( cellHeight * 0.1 ) ) /6 );
backgroundDrawable = ContextCompat.getDrawable( context, R.drawable.ball );
}
LinearLayout shapeBackground = ( LinearLayout )cellView.findViewById( R.id.shape_background );
backgroundDrawable.setBounds(0, 0, 90, 90);
backgroundDrawable = new ScaleDrawable( backgroundDrawable, 0, 90, 90).getDrawable();
shapeBackground.setBackground( backgroundDrawable );
这是可绘制的xml:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<solid android:color="#FF0000"/>
<size
android:width="1dp"
android:height="1dp"/>
</shape>
非常简单。我读了一些SO帖子并尝试了解决方案。没有成功。