如何在软输入中单击完成时将焦点从上一个编辑文本字段更改为按钮?

时间:2017-09-12 07:16:53

标签: android

我希望在单击软输入时将焦点从编辑文本字段更改为提交按钮。

我有以下代码:

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:paddingTop="5sp">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Driver + Conductor :"
        android:textSize="17sp"
        android:textStyle="bold" />

    <EditText
        android:id="@+id/bus_driver_above60"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="5dp"
        android:layout_weight="1"
        android:hint="Driver"
        android:inputType="numberDecimal"
        android:textAlignment="center"
        android:textColor="#000"
        android:nextFocusDown="@+id/bus_conductor_above60"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="2dp"
        android:text="+"
        android:textSize="17sp"
        android:textStyle="bold" />

    <EditText
        android:id="@+id/bus_conductor_above60"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="2dp"
        android:layout_weight="1"
        android:hint="Conductor"
        android:inputType="numberDecimal"
        android:textAlignment="center"
        android:textColor="#000"
        android:nextFocus="@+id/bus_above60_btn"/>

</LinearLayout>

<Button
    android:id="@+id/bus_above60_btn"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:text="Calculate"
    android:textSize="17sp"
    android:textColor="#ffffff"
    android:textStyle="bold"
    android:background="#3498DB"/>

这里是代码,

android:nextFocusDown="@+id/bus_conductor_above60" 

将焦点从“驱动程序编辑”文本字段更改为“导体编辑”文本字段。

但在导体编辑文本字段后,有一个计算按钮 - bus_above60_btn。

android:nextFocusDown="@+id/bus_above60_btn" 

未将焦点从导体编辑文本字段更改为该字段下方的按钮。

我如何实现这一目标?

4 个答案:

答案 0 :(得分:1)

Configuration DomainJoin{

$cred = Get-AutomationPSCredential -Name "azurelogin" 
Login-AzureRmAccount $cred
Import-DscResource -ModuleName 'PSDesiredStateConfiguration'
Import-DscResource -ModuleName 'xDSCDomainjoin'
$dscDomainAdmin = Get-AzureRmAutomationCredential -Name "GSY admin" -ResourceGroupName "RG-DC-ROCS" -AutomationAccountName "RocsAutomation"
$dscDomainName = Get-AzureRMAutomationVariable -Name "dscDomainName" -ResourceGroupName "RG-DC-ROCS" -AutomationAccountName "RocsAutomation"
#PSDscAllowDomainUser = $True

node localhost
{
    xDSCDomainjoin JoinDomain
    {
        Domain = $dscDomainName
        Credential = $dscDomainAdmin
    }
}
}

在您的代码中

<EditText
            android:id="@+id/bus_conductor_above60"
            android:imeOptions="actionDone"
           />

答案 1 :(得分:1)

如果所有组件的布局相同,则代码将起作用。因此,首先将您的按钮包含在相同的布局中,然后放置其他editTexts,然后尝试。

答案 2 :(得分:1)

Afaik有两种方法可以实现目标

1。我的布局完全符合您的要求:

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_centerInParent="true"
    android:gravity="center"
    android:orientation="vertical"
    android:padding="15dp">

    <android.support.design.widget.TextInputLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <EditText
            android:id="@+id/etUsername"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:maxLines="1"
            android:hint="@string/username"
            android:paddingLeft="10dp"
            android:inputType="text"
            android:paddingRight="10dp"
            android:paddingStart="10dp"
            android:paddingEnd="10dp" />

    </android.support.design.widget.TextInputLayout>

    <android.support.design.widget.TextInputLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:passwordToggleEnabled="true"
        >

        <EditText
            android:id="@+id/etPassword"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="20dp"
            android:maxLines="1"
            android:hint="@string/password"
            android:inputType="textPassword"
            android:paddingLeft="10dp"
            android:paddingRight="10dp"
            android:paddingStart="10dp"
            android:paddingEnd="10dp"  />
    </android.support.design.widget.TextInputLayout>

    <Button
        android:id="@+id/btnLogin"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="30dp"
        android:background="@color/colorPrimary"
        android:text="@string/login"
        android:textColor="@color/white"
        android:textSize="17sp" />
</LinearLayout>

它的原因from documentation如下:

  

焦点移动基于找到最近的算法   在给定方向上的邻居。在极少数情况下,默认算法   可能与开发人员的预期行为不符。在这些   在这种情况下,您可以使用这些XML提供显式覆盖   布局文件中的属性[...]

因此,如果您将按钮放在edittexts的相同布局中,它应该自动管理下一个焦点。

2。管理editText

中的“下一次”点击

Taken from this SO post

edittext.setOnKeyListener(new View.OnKeyListener() {
        public boolean onKey(View v, int keyCode, KeyEvent event) {
            if ((event.getAction() == KeyEvent.ACTION_DOWN) && (keyCode == KeyEvent.KEYCODE_ENTER)) {
                Toast.makeText(HelloFormStuff.this, edittext.getText(), Toast.LENGTH_SHORT).show();
                return true;
            }
            return false;
        }
    });

希望这有帮助!

答案 3 :(得分:1)

如果您只想将按钮集中在完成操作上,首先您必须将按钮 result = es.search(index=self.es_index, doc_type='abc', body={"query": {"bool":{ "must":[ {"match": {"url": url}}, {"match": {"url": url2}}], } }}) 设置为focusableInTouchMode

true

现在在<Button android:id="@+id/bus_above60_btn" android:layout_width="match_parent" android:layout_height="50dp" android:text="Calculate" android:focusableInTouchMode="true" android:textSize="17sp" android:textColor="#ffffff" android:textStyle="bold" android:background="#3498DB"/> 的{​​{1}}中,点击完成后按下按钮:

EditText