Android 如何制作完美的方形图像/按钮
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/24927575/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How to make perfect square shaped image/button
提问by Maveňツ
I am designing a basic sudoko GAME for android. I want a 4x4 table with all cells as squares in it.
我正在为 android 设计一个基本的 sudoko 游戏。我想要一个 4x4 表格,其中所有单元格都是正方形。
I am trying this with the 16 Buttons in a TableLayout
.
我正在尝试使用TableLayout
.
My way looks like this
我的方式看起来像这样
they are rectange in shape :(
它们是矩形形状:(
my xml
我的 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>
here is box sky blue
这是天蓝色的盒子
<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>
How to make them sqaure since I have square of 4x4,5x5 & 6x6
由于我有 4x4、5x5 和 6x6 的正方形,因此如何使它们变成正方形
采纳答案by Kevin Cruijssen
Change the wrap_contents to a default size:
将 wrap_contents 更改为默认大小:
android:layout_width="wrap_content"
android:layout_height="wrap_content"
to
到
android:layout_width="@dimen/box_size"
android:layout_height="@dimen/box_size"
(and then set the box_size in the res/values/dimen.xml
like: <dimen name="box_size">50dp</dimen>
)
(然后设置在box_size的res/values/dimen.xml
,如:<dimen name="box_size">50dp</dimen>
)
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 作为宽度,然后在代码中使用myBox.setHeight(myBox.getMeasuredWidth);
使宽度和高度匹配。只需确保视图已完全加载,否则 getMeasuredWidth 返回 0。
EDIT:
编辑:
To change the height to match the wrap_content width after the View is loaded, you can use a ViewTreeObserver:
要在加载视图后更改高度以匹配 wrap_content 宽度,您可以使用 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);
}
});
}
回答by Android is everything for me
Button code in XML
XML 格式的按钮代码
<Button
android:id="@+id/btn"
android:layout_width="64dp"
android:layout_height="64dp"
android:background="@drawable/buttonshape"/>
buttonshape.xml code
buttonshape.xml 代码
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
<corners
android:topLeftRadius="0dp"
android:topRightRadius="0dp"
android:bottomLeftRadius="0dp"
android:bottomRightRadius="0dp"/>
<solid
android:color="#0000ff"/>
<padding
android:left="0dp"
android:top="0dp"
android:right="0dp"
android:bottom="0dp"/>
<size
android:width="64dp"
android:height="64dp"/>
</shape>
回答by nayana bhoj
Try to add fixed width and height.
尝试添加固定的宽度和高度。
android:layout_width="@dimen/box_size"
android:layout_height="@dimen/box_size"
and in res/values/dimen.xml add
并在 res/values/dimen.xml 添加
<dimen name="box_size">40dp</dimen>