我目前正在尝试创建一个看起来像最新Android中的默认Google Calculator的布局。现在我正在努力使用GridLayout和一个自定义组件(称为FlatButton
)。
FlatButton
public class FlatButton extends android.widget.FrameLayout {
...
public FlatButton(Context context, AttributeSet attrs) {
super(context, attrs);
init(context, attrs, 0);
}
private void init(Context context, AttributeSet attrs, int defStyle) {
// Load attributes
final TypedArray a = getContext().obtainStyledAttributes(
attrs, R.styleable.FlatButton, defStyle, 0);
LayoutInflater inflater = (LayoutInflater)context.getSystemService(
Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.control_flat_button, this);
setTextColor(a.getColor(R.styleable.FlatButton_textColor, getTextColor()));
setText(a.getText(R.styleable.FlatButton_text));
this.setPadding(0, 0, 0, 0);
a.recycle();
this.setClickable(true);
}
control_flat_button
的.xml内容:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_margin="0dip"
android:padding="0dip"
android:gravity="center"
android:layout_height="@dimen/flat_button_width"
android:layout_width="@dimen/flat_button_width"
android:clickable="true"
android:background="?attr/selectableItemBackground">
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_margin="0dip"
android:layout_height="@dimen/flat_button_width"
android:layout_width="@dimen/flat_button_width"
android:textSize="30dp"
android:id="@+id/text"/>
</LinearLayout>
这些按钮或现在用于GridLayout
。我想用这些按钮填充布局的整个空间,其中eatch行应该包含其中的5个。我目前的方法使用整个空间,但有一些奇怪的东西。例如,在整个按钮上正确设置了红色background
,但是当我点击其中一个时,涟漪效果似乎在按钮中有某种不可见的边框,正如您在右侧按钮中看到的那样如下:
。
我使用这个.xml布局来显示它们:
<GridLayout
android:useDefaultMargins="false"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:orientation="horizontal"
android:columnCount="5"
android:theme="@style/Theme.AppCompat"
android:background="?android:attr/colorBackground"
>
<com.flashtek.playground.FlatButton
android:background="@android:color/holo_blue_light"
app:text="Button"
android:layout_gravity="fill"
android:layout_columnWeight="1"
/>
<com.flashtek.playground.FlatButton
android:background="@android:color/holo_blue_light"
app:text="Button"
android:layout_gravity="fill"
android:layout_columnWeight="1"
/>
...and some more buttons...
</GridLayout>
如何摆脱这个边界的涟漪效应?这似乎与GridLayout
相关联,因为当我在简单的FlatButton
中使用LinearLayout
时,这个问题就不会发生了。那么,我做错了什么?