【问题标题】:Android Toggle Button custom size/padding/spacingAndroid 切换按钮自定义大小/填充/间距
【发布时间】:2018-09-28 00:11:53
【问题描述】:

我正在尝试为我的 Android 切换按钮创建自定义样式。更改颜色和文本没问题,但我在更改大小/填充/间距或其他任何让它们默认显得如此不必要的大问题时遇到了麻烦。 我已将高度设置为 wrap_content 并将填充和边距设置为 0,但按钮​​的大小仍然与默认的切换按钮一样大。

你们有谁知道我必须更改哪些参数才能删除按钮文本和边框之间不必要的间距?

这是我想要实现的图像的link。 从左到右:默认 ToggleButton、我当前的 ToggleButton 和我想要的 ToggleButton 类型。

这是我的代码(当我动态添加这些按钮时,没有 xml)

ToggleButton button = new ToggleButton(getContext());
button.setLayoutParams(new LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT));
button.setId(IDCreator.getID());
button.setText(tag);
button.setTextOff(tag);
button.setTextOn(tag);
button.setGravity(Gravity.LEFT);
button.setPadding(0, 0, 0, 0);
button.setBackground(getContext().getResources().getDrawable(R.drawable.toggle_selector));

感谢您的帮助。亲切的问候。

编辑:图像和代码

【问题讨论】:

  • 您可以随时发布图片链接(不带 ADS 的链接)。
  • 如果没有真正看到布局,很难理解问题所在。尝试通过链接添加图像,我会在那里解决它。
  • android 切换按钮大小是标准的,但可能是您的图像(自定义)大小不如应有的大小。所以请重新检查图片的大小。
  • @23imak 你好,我上传了一张图片和一些示例代码。
  • android:minWidth="0dp" 和 android:minHeight="0dp" 如所见 stackoverflow.com/questions/29911613/… 虽然我无法以编程方式修复它...

标签: java android layout togglebutton


【解决方案1】:

如果您只是想更改文本在 ToggleButton 内的呈现方式,则需要在 XML 中为您的按钮调整 android:paddingandroid:gravity 参数。

要改变内边距,首先需要让文本远离默认居中(因为居中时内边距无法生效)。您可以通过 android:gravity 参数来执行此操作,这类似于 CSS 中的 text-align。

例如;

<ToggleButton xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="left">
</ToggleButton>

这将使文本与 ToggleButton 的左侧对齐。 但是,默认情况下这也会使其与顶部对齐,因为重力会影响 x 轴和 y 轴。

如果你想垂直居中对齐,水平左对齐,你可以这样做:

<ToggleButton xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="left|center">
</ToggleButton>

这将使您垂直居中,但在水平刻度上完全设置为左侧。 这将使文本出现在按钮边缘的顶部并且看起来没有吸引力。 您需要将对齐方式与文本的填充结合使用,以便将其准确地放在您想要的位置。

例如:

<ToggleButton xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding_left="10dp"
android:gravity="left|center">
</ToggleButton>

这会添加仅向左填充,这意味着您可以将其设置为尽可能远离边框。

您可以调整每一边的填充和重力,以便根据需要缩放文本,但这是控制 ToggleButton 的内部文本对齐方式的最佳方法。

【讨论】:

  • 感谢您的详细回复。不幸的是,这并没有奏效。 Text 在按钮内改变了位置,但按钮的大小保持不变。有关代码示例,请参阅我更新的问题。
  • 您是否正在尝试为比本机 ToggleButton 更小的按钮创建一个类,该按钮可以多次使用,根据其文本动态调整大小?或者这是单个静态按钮?如果是这样,您可以只指定宽度和高度,然后根据自己的喜好调整填充和重力?
【解决方案2】:

这将为您提供字符串的宽度,即;你的情况下的文字。

Paint paint = toggleButton.getPaint();
float length = paint.measureText(YOUR_STRING);

这会给你它在屏幕上的字符串宽度。现在通过 LayoutParams 设置切换按钮的宽度。

假设您的切换按钮的父布局是 LinearLayout。 所以它应该是这样的:

toggleButton.setLayoutParams(new LayoutParams(WIDTH_YOU_CALCULATED,LinearLayout.LayoutParams.WRAP_CONTENT));         

这会将您的 ToggleButton 的宽度和高度设置为您计算的值。

【讨论】:

  • 谢谢,但这也不起作用。看起来文本周围仍然有很多填充,因为如果我调整按钮的大小,文本就会消失。 (我想改变按钮的高度而不是宽度)
【解决方案3】:

我意识到这已经过时了,但也许使用 setScaleX({provide a float 0.0 - 1.0}) 和 setScaleY({provide a float 0.0 - 1.0}) 可能是原始帖子的答案(如何更改切换按钮)。

【讨论】:

    【解决方案4】:

    使用 CheckedTextView 代替:https://stackoverflow.com/a/36084999/377320 它只是一个带有检查状态的常规 TextView,所以没有奇怪的填充等。

    【讨论】:

      【解决方案5】:

      您需要在 xml 文件中定义您的 ToggleButton 并确保包含

       android:minHeight="0dp"
       android:minWidth="0dp"
      

      作为属性。我遇到了完全相同的问题,因此几乎放弃了使用 ToggleButton。在我的代码中调用 setMinWidth(int) 和 setMinHeight(int) 对我没有任何影响,我尝试过的其他任何事情也没有。但是当我在 xml 中设置这些属性时,我就能够使用填充控制 ToggleButton 的大小,尽管请注意我也使用 xml 修改了填充,如下所示:

      android:paddingTop="6dp"
      android:paddingBottom="6dp"
      

      只要您在 xml 中设置 minWidth 和 minHeight,您就可以通过编程方式设置填充。顺便说一句,在 xml 中定义小部件非常容易。大多数人使用 View.inflate() 或 myinflater.inflate() 来做,所以谷歌这些术语,你会找到例子。

      【讨论】:

        猜你喜欢
        • 2016-09-19
        • 2013-08-22
        • 1970-01-01
        • 1970-01-01
        • 2015-05-16
        • 1970-01-01
        • 1970-01-01
        • 2014-06-03
        • 2015-07-06
        相关资源
        最近更新 更多