我想垂直放置两个圆圈,我希望它们的大小是父高度的一半。简而言之,请参见下图。
我希望根据x
来缩放圈子,这是TextView的高度,并且可以根据系统偏好而变化。我在下面创建了一个布局,但它没有用。这可以实现吗?
更新
根据答案,我为圆圈指定了一些任意的宽度和高度,然后更改了#34; fitXY" to" centerInside" (因为我发现fitXY不保持纵横比)。为了模拟不同的系统设置,我将任意高度设置为TextView。我将ImageViews的背景颜色设置为red
以查看它们的边界。
问题是,如果圆的宽度/高度小于TextView高度的1/2(例如,圆宽/高度= 10dp,TextView高度= 100dp),则圆圈不会向上扩展。
如果圆的宽度/高度大于TextView高度的1/2(例如,圆宽/高度= 200dp,TextView高度= 100dp),则圆圈会正确缩放,但不知何故有一些圆圈左/右侧的奇怪空边。
END OF UPDATE
我创建了一个如下所示的布局,但它没有用。
item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
<LinearLayout
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="match_parent">
<ImageView
android:src="@drawable/circle"
android:scaleType="fitXY"
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="0dp"/>
<ImageView
android:src="@drawable/circle"
android:scaleType="fitXY"
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="0dp"/>
</LinearLayout>
<TextView
android:textAppearance="@android:style/TextAppearance.Large"
android:text= "If he's so smart, how come he's dead?"
android:layout_weight="1"
android:layout_width="0dp"
android:gravity="center_vertical"
android:layout_height="wrap_content"/>
</LinearLayout>
circle.xml
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<solid
android:color="#0000FF"/>
</shape>
答案 0 :(得分:1)
我通过创建自定义ImageView解决了这个问题。基本上,如果宽度和高度不同,此ImageView将宽度设置为高度。
使用这种方式,圆形绘图不需要<Size>
。
public class SquareImageView extends ImageView
{
public SquareImageView(Context context)
{
super(context);
}
public SquareImageView(Context context, AttributeSet attrs)
{
super(context, attrs);
}
@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom)
{
int width = right - left;
int height = bottom - top;
if(width!=height)
{
post(new Runnable()
{
@Override
public void run()
{
setMinimumWidth(height);
}
});
}
}
}
答案 1 :(得分:0)
尝试下面..
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<LinearLayout
android:id="@+id/ll"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical" >
<ImageView
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_weight="1"
android:scaleType="fitXY"
android:src="@drawable/circle" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_weight="1"
android:scaleType="fitXY"
android:src="@drawable/circle" />
</LinearLayout>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_toRightOf="@+id/ll"
android:layout_centerVertical="true"
android:text="If he's so smart, how come he's dead?"
android:textAppearance="@android:style/TextAppearance.Large" />
和circle.xml
<?xml version="1.0" encoding="utf-8"?>
<solid android:color="#0000FF" />
<stroke
android:width="2dp"
android:color="#fff" />
<size
android:height="80dp"
android:width="80dp" />
答案 2 :(得分:0)
以下布局部分解决了您的问题。要完成它,您希望在运行时(以编程方式)获取layout_height的确切值,并将LinearLayout的layout_width
(将替换硬编码值100dp)设置为layout_height值的一半。
<?xml version="1.0" encoding="utf-8"?>
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:numColumns="2"
android:columnCount="2"
>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="100dp"
android:layout_height="match_parent"
android:weightSum="2"
android:orientation="vertical"
android:layout_column="0"
android:layout_row="0"
>
<ImageView
android:src="@drawable/circle"
android:scaleType="fitXY"
android:layout_weight="1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
<ImageView
android:src="@drawable/circle"
android:scaleType="fitXY"
android:layout_weight="1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:text= "If he's so smart, how come he's dead?"
android:layout_column="1"
android:layout_row="0"
android:gravity="center_vertical"
/>
答案 3 :(得分:0)
将圈子更改为此。它应该有效。
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<solid
android:color="#0000FF"/>
<size
android:height="someHeight in dp"
android:width="sameWidth in dp" />
</shape>