自定义键盘中的间距

8

当制作自定义键盘时,可以通过使用android:horizontalGap="6.25%p"来获得一个按键的前导空间(左侧的空间)。
那么如何获得尾随空间(右侧的空间)呢?

4个回答

5
android:horizontalGap="6.25%p.

该代码创建了一个间隙,在具有 horizontalGap 属性的键位之前。 例如: 键位左侧的前导空格。

例如:

<Row>        
    <Key android:codes="69"    android:keyLabel="E" android:horizontalGap="6.25%p" />
    <Key android:codes="70"    android:keyLabel="F" />        
</Row>

现在添加一个大于0的horizontalGap(在键盘级别上),则具有horizontalGap属性的键不再在前面创建间隙,而是在后面创建间隙。 即。键的末尾空格(向右的空格)。

很好,但是如果我想要键盘上定义的键之间的一般间隙,并且我想要自定义定义的空间,在键的右侧和左侧都有间隔,怎么办呢? - Warpzit
请你能否在你提供的第二个案例中增加更多的示例。不太清楚如何实现“右侧间隙”。谢谢! - undefined

4

对于我在 Android 5.1 上,android:horizontalGap 属性的工作方式如下:

  • 如果一行中所有 android:keyWidth 的总和大于100,则指定该属性的按键后将显示间隙。
  • 如果总和小于100,则该间隙位于按键之前。

例如,对于以下情况,该间隙位于按键之前:

<Row>
    <Key android:codes="97" android:keyLabel="a" android:horizontalGap="5%p" android:keyEdgeFlags="left"/>
    <Key android:codes="115" android:keyLabel="s"/>
    <Key android:codes="100" android:keyLabel="d"/>
    <Key android:codes="102" android:keyLabel="f"/>
    <Key android:codes="103" android:keyLabel="g"/>
    <Key android:codes="104" android:keyLabel="h"/>
    <Key android:codes="106" android:keyLabel="j"/>
    <Key android:codes="107" android:keyLabel="k"/>
    <Key android:codes="108" android:keyLabel="l"/>
    <Key android:codes="66" android:keyIcon="@drawable/enter_key" android:keyWidth="20%p" android:isRepeatable="true" android:keyEdgeFlags="right"/>
</Row>

当我只改变一个值时,出现了间隙:

<Row>
    <Key android:codes="97" android:keyLabel="a" android:horizontalGap="5%p" android:keyEdgeFlags="left"/>
    <Key android:codes="115" android:keyLabel="s"/>
    <Key android:codes="100" android:keyLabel="d"/>
    <Key android:codes="102" android:keyLabel="f"/>
    <Key android:codes="103" android:keyLabel="g"/>
    <Key android:codes="104" android:keyLabel="h"/>
    <Key android:codes="106" android:keyLabel="j"/>
    <Key android:codes="107" android:keyLabel="k"/>
    <Key android:codes="108" android:keyLabel="l"/>
    <Key android:codes="66" android:keyIcon="@drawable/enter_key" android:keyWidth="22%p" android:isRepeatable="true" android:keyEdgeFlags="right"/>
</Row>

1
我也遇到了这个问题,但从未找到好的解决方案。Android的键盘布局API很差。如果我再做一次,我不会使用它,而是直接从头开始创建自己的UI,并直接与InputMethod交互。
无论如何,我的hack解决方案是在布局底部添加一个额外的键,宽度为100%,高度仅为1dp。该按钮不起任何作用,高度非常小,用户看不到它。但是,键的宽度可以解决间隙问题。

完全同意。我很反感不得不编写自己的键盘库 - 但似乎找不到更好的选择。间距是一团糟。我不得不为纵向和横向设计单独的布局 - 我的用户仍然报告问题 - 比如在某些平台上键消失。 - Melllvar

0

唯一的解决方法是指定正确的keyWidth,使得一行中keyWidth的总和小于或等于100%。(感谢@Lemberg的观察)

对于我的例子,我将100除以12(一行中最大键数),得到8.(3),因此11个键的正确horizontalGap应为8.33/2。(4.165 + 11*8.33 + 4.165 = 99.96 ~ 100)

<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
       android:keyWidth="8.33%p"
  ...
  <Row>
        <Key android:codes="4304" android:keyLabel="ა" android:horizontalGap="4.165%p" android:keyEdgeFlags="left" />
        <Key android:codes="4321" android:keyLabel="ს" />
        <Key android:codes="4307" android:keyLabel="დ" />
        <Key android:codes="4324" android:keyLabel="ფ" />
        <Key android:codes="4306" android:keyLabel="გ" />
        <Key android:codes="4336" android:keyLabel="ჰ"/>
        <Key android:codes="4335" android:keyLabel="ჯ"/>
        <Key android:codes="4313" android:keyLabel="კ"/>
        <Key android:codes="4314" android:keyLabel="ლ"/>
        <Key android:codes="4329" android:keyLabel="ჩ"/>
        <Key android:codes="4319" android:keyLabel="ჟ" android:keyEdgeFlags="right"/>
  </Row>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接