如何使完美的方形按钮 [英] How to make perfect square shaped button
问题描述
我为Android设计基本sudoko游戏。我想所有的细胞作为方块一个4x4的表吧。
I am designing a basic sudoko GAME for android. I want a 4x4 table with all cells as squares in it.
我在一个TableLayout的16个按钮尝试此。
I am trying this with the 16 Buttons in a TableLayout.
我的方法是这样的
它们的形状rectange:(
they are rectange in shape :(
我的XML
<TableLayout
android:id="@+id/tl"
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:gravity="center" >
<TableRow
android:id="@+id/tableRow1"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:gravity="center" >
<Button
android:id="@+id/button1"
style="@style/box_sky_blue"
android:layout_weight="1"
android:text="1" />
<Button
android:id="@+id/button2"
style="@style/box_sky_blue"
android:layout_weight="1"
android:text="2" />
<Button
android:id="@+id/button3"
style="@style/box_sky_blue"
android:layout_weight="1"
android:text="3" />
<Button
android:id="@+id/button4"
style="@style/box_sky_blue"
android:layout_weight="1"
android:text="4" />
</TableRow>
<TableRow
android:id="@+id/tableRow2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center" >
<Button
android:id="@+id/button5"
style="@style/box_sky_blue"
android:layout_weight="1"
android:text="5" />
<Button
android:id="@+id/button6"
style="@style/box_sky_blue"
android:layout_weight="1"
android:text="6" />
<Button
android:id="@+id/button7"
style="@style/box_sky_blue"
android:layout_weight="1"
android:text="7" />
<Button
android:id="@+id/button8"
style="@style/box_sky_blue"
android:layout_weight="1"
android:text="8" />
</TableRow>
<TableRow
android:id="@+id/tableRow3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center" >
<Button
android:id="@+id/button9"
style="@style/box_sky_blue"
android:layout_weight="1"
android:text="9" />
<Button
android:id="@+id/button10"
style="@style/box_sky_blue"
android:layout_weight="1"
android:text="7" />
<Button
android:id="@+id/button11"
style="@style/box_sky_blue"
android:layout_weight="1"
android:text="8" />
<Button
android:id="@+id/button12"
style="@style/box_sky_blue"
android:layout_weight="1"
android:text="7" />
</TableRow>
<TableRow
android:id="@+id/tableRow3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center" >
<Button
android:id="@+id/button13"
style="@style/box_sky_blue"
android:layout_weight="1"
android:text="9" />
<Button
android:id="@+id/button14"
style="@style/box_sky_blue"
android:layout_weight="1"
android:text="7" />
<Button
android:id="@+id/button15"
style="@style/box_sky_blue"
android:layout_weight="1"
android:text="8" />
<Button
android:id="@+id/button16"
style="@style/box_sky_blue"
android:layout_weight="1"
android:text="7" />
</TableRow>
</TableLayout>
下面是箱天蓝
<style name="box_sky_blue">
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:background">@color/box_color_sky_blue</item>
<item name="android:layout_margin">5dp</item>
<item name="android:padding">5dp</item>
<item name="android:textSize">20sp</item>
<item name="android:gravity">center</item>
<item name="android:textColor">#ffffff</item>
</style>
如何使他们sqaure因为我有4x4,5x5和放大器的平方; 6×6
How to make them sqaure since I have square of 4x4,5x5 & 6x6
REGARDS
的Maven
推荐答案
更改wrap_contents为默认大小:
Change the wrap_contents to a default size:
android:layout_width="wrap_content"
android:layout_height="wrap_content"
到
android:layout_width="@dimen/box_size"
android:layout_height="@dimen/box_size"
(然后设置在 RES /价值/ dimen.xml
像box_size:&LT;扪NAME =box_size&GT; 50dp&LT ; /扪&GT;
)
(and then set the box_size in the res/values/dimen.xml
like: <dimen name="box_size">50dp</dimen>
)
或者,使用WRAP_CONTENT的宽度,然后在code使用 myBox.setHeight(myBox.getMeasuredWidth);
这样的宽度和高度匹配。只要确保看法是完全加载虽然,否则getMeasuredWidth返回0。
OR, use wrap_content for the width, and then in code use myBox.setHeight(myBox.getMeasuredWidth);
so the width and height match. Just make sure the view is completely loaded though, otherwise getMeasuredWidth returns 0.
编辑:
要改变高度来匹配WRAP_CONTENT宽度查看加载后,您可以使用ViewTreeObserver:
To change the height to match the wrap_content width after the View is loaded, you can use a ViewTreeObserver:
if(yourActivityLayout.getViewTreeObserver().isAlive()){
yourActivityLayout.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout(){
// The view is completely loaded now, so getMeasuredWidth() won't return 0
yourButton1.setLayoutParams(new TableLayout.LayoutParams(yourButton1.getMeasuredWidth(), yourButton1.getMeasuredWidth()));
... // Do this for all buttons (preferably in a for-loop to prevent repetition)
// Destroy the onGlobalLayout afterwards, otherwise it keeps changing
// the sizes non-stop, even though it's already done
yourActivityLayout.getViewTreeObserver().removeOnGlobalLayoutListener(this);
}
});
}
这篇关于如何使完美的方形按钮的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!