我有这个按钮,我想要25%的屏幕宽度和方形。我已经看到了一些制作网格的方法但是效果还不好。有人对此事有任何意见吗? 还需要描述更多的背景吗?
答案 0 :(得分:7)
Android.Support.Design
包还提供了一种名为PercentRelativeLayout
的新布局类型。
您可以通过将Xamarin.Android.Support.Percent
NuGet package添加到项目中来获取它。
这样您就可以将PercentRelativeLayout
添加到您的布局中,如:
<android.support.percent.PercentRelativeLayout
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="match_parent"/>
<ImageView
app:layout_widthPercent="50%"
app:layout_heightPercent="50%"
app:layout_marginTopPercent="25%"
app:layout_marginLeftPercent="25%" />
<!-- more views here -->
</android.support.percent.PercentRelativeLayout>
您可以找到more information about this layout in the Google API docs。
答案 1 :(得分:2)
您可以使用水平LinearLayout
并将按钮的layout_weight
设置为.25,并添加权重为.75的空视图。注意:将layout_width
设置为0.
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:text="MyButton"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight=".25" />
<View
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight=".75" />
</LinearLayout>
如果你想要平方,你必须创建一个自定义布局,如:
public class SquareLayout : LinearLayout
{
protected override void OnMeasure(int widthMeasureSpec, int heightMeasureSpec)
{
var width = MeasureSpec.GetSize(widthMeasureSpec);
var height = MeasureSpec.GetSize(heightMeasureSpec);
if (height == 0 && width == 0)
{
base.OnMeasure(widthMeasureSpec, heightMeasureSpec);
return;
}
if (height == 0)
{
height = width;
}
else if (width == 0)
{
width = height;
}
if (width > height)
width = height;
else
height = width;
base.OnMeasure(
MeasureSpec.MakeMeasureSpec(width, MeasureSpecMode.Exactly),
MeasureSpec.MakeMeasureSpec(height, MeasureSpecMode.Exactly)
);
}
protected SquareLayout(IntPtr javaReference, JniHandleOwnership transfer) : base(javaReference, transfer)
{
}
public SquareLayout(Context context) : base(context)
{
}
public SquareLayout(Context context, IAttributeSet attrs) : base(context, attrs)
{
}
public SquareLayout(Context context, IAttributeSet attrs, int defStyle) : base(context, attrs, defStyle)
{
}
}
然后在你的axml中使用你的布局
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<mynamespacelowercase.SquareLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight=".25">
<Button
android:text="MyButton"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<mynamespacelowercase.SquareLayout>
<View
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight=".75" />
</LinearLayout>
或者您可以修改自定义布局以根据百分比计算宽度。那么你就不需要空视图和布局权重了。
答案 2 :(得分:0)
感谢您的回复。
我发现这是最简单的。
var metric = Resources.DisplayMetrics;
width = (int)(metric.WidthPixels * .25);
然后我在LayoutParameters
。