我的应用中需要完美的圆形按钮。根据屏幕尺寸(布局高度)自动缩放。
我的xml文件:circle1try.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval" >
<corners
android:radius="1000dp"
/>
<solid
android:color="#ff00b3ff"
/>
</shape>
我在活动布局中使用它的地方:
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:padding="30dp"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true">
<Button
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/button1Key"
android:typeface="monospace"
android:textSize="20dp"
android:background="@drawable/circle1try"
android:textColor="#ffffffff"
android:text="tap here"
android:layout_gravity="center"/>
</LinearLayout>
整个LinearLayout
位于另一个垂直LinearLayout
,我使用layout_weight
来确保布局占用的空间在所有屏幕上具有相似的比例。
这个与按钮相关的java文件的代码片段
roundButton=(Button)findViewById(R.id.button1Key);
int btnSize=roundButton.getLayoutParams().height;
roundButton.setLayoutParams(new LinearLayout.LayoutParams(btnSize, btnSize));
并且在我的应用中,根据用户的操作,我还需要更改我在同一个类中使用以下代码段的颜色。
bgShape = (GradientDrawable)roundButton.getBackground();
bgShape.setColor(Color.BLACK);
然而,我使用此过程的按钮不是一个完整的循环。 它接近圆形,但沿x轴宽。 那么如何才能得到一个可以轻松改变颜色的圆形按钮呢?
答案 0 :(得分:1)
您可以使用此库: AndroidCircleButton
答案 1 :(得分:0)
好的!所以基本上不能用于代码的是它甚至在绘制布局之前就缩放了形状。解决方案等待绘制布局。
最初getHeight()
将返回0
。
我使用了ViewTreeObserver。
现在它返回实际值。
我合并的代码片段解决了我的问题。
ViewTreeObserver vto = player.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
roundButton.getViewTreeObserver().removeGlobalOnLayoutListener(this);
roundButton.setWidth(player.getHeight());
ViewGroup.LayoutParams params=roundButton.getLayoutParams();
params.width=player.getHeight();
roundButton.setLayoutParams(params);
}
});