标签: android-gravity

Android中的gravity和layout_gravity有什么区别?

我知道我们可以为android:gravityandroid:layout_gravity属性设置以下值:

  1. center
  2. center_vertical
  3. center_horizontal

但我对这两个问题感到困惑.

使用android:gravity和有android:layout_gravity什么区别?

android android-layout android-gravity

1286
推荐指数
12
解决办法
54万
查看次数

在textview中更改可绘制图像的重力

我在TextView中添加了Drawable start图像.问题是我无法控制TextView中Drawable的重力

我需要实现的目标 我需要实现的目标

到目前为止我取得了什么

到目前为止我取得了什么

这是我的TextView

        <TextView
            android:id="@+id/tv_8_digit_check"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:drawablePadding="@dimen/dimen_4"
            android:drawableStart="@drawable/ic_validate"
            android:text="@string/at_least_8_characters_txt"
            android:textColor="@color/white_trans"
            android:textSize="12sp" />
Run Code Online (Sandbox Code Playgroud)

关于如何将Drawable的重力设置为顶部/开始的任何建议?谢谢

android textview android-layout android-drawable android-gravity

20
推荐指数
2
解决办法
7118
查看次数

如何在自定义Android视图中检查重力标记?

问题

我有一个自定义的Android视图,我想让用户设置重力以布局内容onDraw.这是我正在使用的简化版本onDraw:

// check gravity
if ((mGravity & Gravity.CENTER_VERTICAL) == Gravity.CENTER_VERTICAL) {
    // draw the content centered vertically
} else if ((mGravity & Gravity.BOTTOM) == Gravity.BOTTOM) {
    // draw the content at the bottom
}
Run Code Online (Sandbox Code Playgroud)

其中mGravity从XML属性(获得这样).

如果我将引力设置为Gravity.CENTER_VERTICAL它可以正常工作.但我很惊讶地发现,如果我把它设置为Gravity.BOTTOM,那么Gravity.CENTER_VERTICAL检查仍然是真的!

为什么会这样?

我必须查看二进制值才能看出原因:

因此,当我这样做

mGravity = Gravity.BOTTOM;
(mGravity & Gravity.CENTER_VERTICAL) == Gravity.CENTER_VERTICAL
//  (0101 & 0001) == 0001 …
Run Code Online (Sandbox Code Playgroud)

java flags android android-layout android-gravity

17
推荐指数
2
解决办法
1753
查看次数

在TextInputLayout中垂直居中提示和EditText

我正在使用TextInputLayout来显示提示,但我无法将其垂直居中.我总是得到这个:

在此输入图像描述

EditText/TextInputEditText中没有文本时,我想垂直居中.我尝试过基本的想法(重力,layout_gravity等).到目前为止,唯一的方法是添加一些"魔术"填充,但我想以更清洁的方式做到这一点.我正在考虑测量顶部提示标签高度,并在它不可见时将其添加为底部边距,并在可见时删除相同的边距,但我还不太了解TextInputLayout源代码.有谁知道怎么做?

编辑:

我试过这个建议的答案:

<android.support.design.widget.TextInputLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="20dp"
    android:background="@color/grey_strong">

    <android.support.design.widget.TextInputEditText
        android:layout_width="match_parent"
        android:layout_height="90dp"
        android:background="@color/red_light"
        android:gravity="center_vertical"
        android:hint="Test"/>

</android.support.design.widget.TextInputLayout>
Run Code Online (Sandbox Code Playgroud)

我得到了这个:

在此输入图像描述

"大"提示仍然没有垂直居中.它略低于中心,因为"小"提示(在灰色背景中,在顶部,仅在场聚焦时可见)在顶部占据一些空间并推动EditText.

android android-edittext android-textinputlayout android-gravity

11
推荐指数
3
解决办法
6865
查看次数

如何使TextInputLayout中的错误消息出现在中心

目前它看起来像附加此布局:

<android.support.design.widget.TextInputLayout
    android:id="@+id/layoutCurrentPW"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="10dp"
    app:errorEnabled="true">
Run Code Online (Sandbox Code Playgroud)

如何设置错误信息"密码必须至少为8个字符"到中心引力?
我尝试使用android:gravity ="center",但这不起作用.

在此输入图像描述

编辑
包含EditText的布局:

<android.support.design.widget.TextInputLayout
    android:id="@+id/layoutCurrentPW"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="10dp"
    app:errorEnabled="true">

        <EditText
            android:id="@+id/editTextCurrentPassword"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="bottom"
            android:layout_marginLeft="50dp"
            android:layout_marginRight="50dp"
            android:gravity="center"
            android:hint="@string/current_password"
            android:inputType="textPassword"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:textColor="@color/black" />
    </android.support.design.widget.TextInputLayout>
Run Code Online (Sandbox Code Playgroud)

android android-textinputlayout android-gravity

7
推荐指数
1
解决办法
5043
查看次数

在RTL中android:gravity ="start"将文本左对齐

在使用RTL语言(阿拉伯语)的设备上测试我的布局时,我发现带有重力的TextView:start始终将文本对齐而不是右对齐!我试过android:textAlignment ="viewStart"并且它正常工作但由于API reqs我不依赖它.

我的代码(我的意思是代码中的第一个textview):

<LinearLayout
android:orientation="horizontal"
android:gravity="center_vertical"
>

<TextView
    android:text="Size"
    android:gravity="start"
    android:layout_weight="1"
    android:layout_width="0dp"
    android:layout_height="wrap_content"/>

<LinearLayout android:gravity="center" android:orientation="vertical" android:layout_width="wrap_content" android:layout_height="wrap_content">
    <TextView
        android:text="000"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="subtext"/>
</LinearLayout></LinearLayout>
Run Code Online (Sandbox Code Playgroud)

android android-linearlayout android-gravity

7
推荐指数
1
解决办法
3652
查看次数

Android iconGravity 不适用于具有 CircularProgressIndicator 的 MaterialButton

我创建了一个扩展 MaterialButton 的自定义视图,在加载时用 CircularProgressIndicator 替换可绘制对象。

但是,当我用 CircularProgressIndicator 替换可绘制对象时, iconGravity 不再起作用。我不明白我做错了什么。

我已经能够将课程归结为:

class LoadingButton constructor(context: Context) : MaterialButton(context) {

    private val progressIndicatorDrawable by lazy {
        val progressIndicatorSpec = CircularProgressIndicatorSpec(context, null, 0, R.style.Widget_MaterialComponents_CircularProgressIndicator_ExtraSmall)
        progressIndicatorSpec.indicatorColors = intArrayOf(getColor(context, R.color.white))
        IndeterminateDrawable.createCircularDrawable(context, progressIndicatorSpec).apply {
            setVisible(true, true)
        }
    }

    init {
        // the following drawable is aligned to the start of the view (incorrect).
        icon = progressIndicatorDrawable
        // the following drawable is aligned to the start of the text (correct).
        // icon = DrawableUtil.getDrawable(context, R.drawable.icon_delete)
        text = …
Run Code Online (Sandbox Code Playgroud)

android progress-indicator android-gravity material-components material-components-android

5
推荐指数
1
解决办法
906
查看次数

如何使 SwiftUI Text multilineTextAlignment 从顶部和中心开始

在此输入图像描述

如何使图像和文本对齐方式与 SwiftUI LazyVGrid 中的其他 3 个对齐方式相同,如下图所示?

我认为问题是如果文本是多行的,如何使文本从顶部开始。在Android中,我可以使用gravity =“top | center”,但在SwiftUI中,我使用.multilineTextAlignment(.center),但结果并不像我预期的那样。

在此输入图像描述

这是我在代码中尝试的内容:

      LazyVGrid(columns: gridItemLayout, spacing: 0) {
          ForEach((0...7), id: \.self) { i in
               VStack {
                    RemoteImageView(url: vm.listService[i].image_uri)
                        .frame(width: 100, height: 100)
                    Text(vm.listService[i].name)
                        .font(.body)
                        .multilineTextAlignment(.center)
                        .frame(maxWidth: .infinity, alignment: .center)
               }
         }
      }
      .padding(.horizontal, 25.0)
Run Code Online (Sandbox Code Playgroud)

gridview android-gravity swiftui lazyvgrid lazyhgrid

4
推荐指数
1
解决办法
1979
查看次数

Android:如何在启动画面上对齐2个图像

我想使用包含2张图像的splah屏幕:

  • 主图像必须完全居中
  • 次要图像必须位于底部和主图像之间的中心

预期的渲染是这样的: 预期的飞溅

但我没有看到如何得到这个,我的第二个图像是底部对齐的: 实际飞溅

我的泼溅的XML是:

 <?xml version="1.0" encoding="utf-8" ?>
 <layer-list
    xmlns:android="http://schemas.android.com/apk/res/android">
        <item>
            <shape android:shape="rectangle">
                <solid android:color="@color/ComplementColor" />
                <padding 
                    android:left="0dip" 
                    android:top="0dip"
                    android:right="0dip" 
                    android:bottom="0dip" />
            </shape>
        </item>
        <item>
            <bitmap android:src="@drawable/main_logo"
               android:gravity="center" />
        </item>
        <item>
            <bitmap android:src="@drawable/secondary_logo"
               android:gravity="bottom" />
        </item>
</layer-list>
Run Code Online (Sandbox Code Playgroud)

android image splash-screen bitmap android-gravity

3
推荐指数
1
解决办法
2683
查看次数

如果容器布局在滚动视图中,则Android中心重力不起作用

我正在创建一个ProgressBar放置在LinearLayout的垂直中心(其他布局不起作用;我需要使用LinearLayout).这是一些代码:

LinearLayout linearLayout = new LinearLayout(context);
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
        LinearLayout.LayoutParams.MATCH_PARENT,
        LinearLayout.LayoutParams.MATCH_PARENT);
linearLayout.setLayoutParams(layoutParams);
linearLayout.setOrientation(LinearLayout.VERTICAL);
linearLayout.setGravity(Gravity.CENTER);

//add progressbar
ProgressBar progressBar = new ProgressBar(context);
progressBar.setLayoutParams(new ViewGroup.LayoutParams(
        ViewGroup.LayoutParams.WRAP_CONTENT,
        ViewGroup.LayoutParams.WRAP_CONTENT));
linearLayout.addView(progressBar);
Run Code Online (Sandbox Code Playgroud)

我有一个ContainerView,它将保存上面创建的LinearLayout.像这样的东西:

public class ContainerView extends ScrollView {
    public ContainerView(Context context) {
        super(context);
        initView(context);
    }

    private void initView(Context context){
        addView(linearLayout);     //which is created in the snippet above
    }
} 
Run Code Online (Sandbox Code Playgroud)

如果我使用LinearLayout扩展ContainerView,一切正常.

如果我使用ScrollView扩展ContainerView,则ProgressBar水平居中但不垂直居中.

这种双重行为背后的原因是什么?我的目标是在下载一些数据时显示ProgressBar; 下载数据后,我需要在LinearLayout中显示它.

(注意:使用ScrollView的原因是下载的数据可能太大而不适合小屏幕.这可能看起来像ListView的用例,但还有一些其他原因阻止我使用ListView.)

android scrollview android-layout layout-gravity android-gravity

-18
推荐指数
1
解决办法
953
查看次数