android - 如何在获得焦点时将 EditText 移动到顶部?
android - How to shift EditText to top when focused?
我有一个视图,它在顶部包含一个 ImageView,在下方包含一个带有 Button 的 EditText。
当出现键盘时,如何将 ImageView 移出屏幕以允许显示 EditText 和 Button?
这是我的 layout.xml 文件:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#fff"
tools:context="com.archimedia.appToYours.MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:ignore="UselessParent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:weightSum="1">
<!-- this is what I want to shift up out of the screen -->
<ImageView
android:id="@+id/upToYoursImageView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:contentDescription=""
app:srcCompat="@drawable/_title"/>
<EditText
android:id="@+id/code"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/targa"
android:ems="15"
android:fontFamily="sans-serif-condensed"
android:hint="Some text..."
android:inputType="textCapCharacters"
android:maxLength="15"
android:paddingLeft="60dp"
android:textColor="#222"
android:textColorHint="#222"
android:textColorLink="@android:color/holo_blue_bright"
android:textColorSecondary="#222"
android:textCursorDrawable="@drawable/cursor"
android:textSize="40sp"
android:textStyle="bold"
tools:ignore="HardcodedText,RtlHardcoded,RtlSymmetry" />
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="130dp"
android:layout_marginBottom="50dp"
android:layout_weight="0.50"
tools:ignore="InefficientWeight">
<Button
android:id="@+id/send_button"
style="@style/Widget.AppCompat.Button.Colored"
android:layout_width="170dp"
android:layout_height="170dp"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:background="@drawable/rounded_button"
android:foregroundGravity="center_vertical|center_horizontal"
android:text="Go!"
android:textAppearance="@style/TextAppearance.AppCompat.Display3"
android:textSize="38sp"
tools:ignore="HardcodedText" />
</RelativeLayout>
</LinearLayout>
</LinearLayout>
</RelativeLayout>
我想你可以添加一个 ScrollView
试试这个代码,我希望它能有所帮助
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#fff"
tools:context="com.archimedia.appToYours.MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:ignore="UselessParent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:weightSum="1">
<!-- this is what I want to shift up out of the screen -->
<ScrollView android:layout_height="wrap_content"
android:layout_width="match_parent">
<ImageView
android:id="@+id/upToYoursImageView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:contentDescription=""
app:srcCompat="@drawable/_title"/>
<EditText
android:id="@+id/code"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/targa"
android:ems="15"
android:fontFamily="sans-serif-condensed"
android:hint="Some text..."
android:inputType="textCapCharacters"
android:maxLength="15"
android:paddingLeft="60dp"
android:textColor="#222"
android:textColorHint="#222"
android:textColorLink="@android:color/holo_blue_bright"
android:textColorSecondary="#222"
android:textCursorDrawable="@drawable/cursor"
android:textSize="40sp"
android:textStyle="bold"
tools:ignore="HardcodedText,RtlHardcoded,RtlSymmetry" />
</ScrollView>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="130dp"
android:layout_marginBottom="50dp"
android:layout_weight="0.50"
tools:ignore="InefficientWeight">
<Button
android:id="@+id/send_button"
style="@style/Widget.AppCompat.Button.Colored"
android:layout_width="170dp"
android:layout_height="170dp"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:background="@drawable/rounded_button"
android:foregroundGravity="center_vertical|center_horizontal"
android:text="Go!"
android:textAppearance="@style/TextAppearance.AppCompat.Display3"
android:textSize="38sp"
tools:ignore="HardcodedText" />
</RelativeLayout>
</LinearLayout>
</LinearLayout>
</RelativeLayout>
我也有类似的需求。我解决它的方法是在根视图上监听 LayoutChanged 事件。一旦我看到视图的高度变小,我就假设键盘打开并做出相应的反应。
这是该方法的示例。希望对您有所帮助:
MainActivity.java
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.activity_main).addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
@Override
public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
if (bottom < oldBottom) {
// View got smaller in height
// In this case this means that the keyboard was opened
findViewById(R.id.upToYoursImageView).setVisibility(View.GONE);
} else {
// View got larger in height
findViewById(R.id.upToYoursImageView).setVisibility(View.VISIBLE);
}
}
});
}
}
AndroidManifest.xml
<activity android:name=".MainActivity"
android:windowSoftInputMode="adjustResize"/>
我有一个视图,它在顶部包含一个 ImageView,在下方包含一个带有 Button 的 EditText。 当出现键盘时,如何将 ImageView 移出屏幕以允许显示 EditText 和 Button?
这是我的 layout.xml 文件:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#fff"
tools:context="com.archimedia.appToYours.MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:ignore="UselessParent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:weightSum="1">
<!-- this is what I want to shift up out of the screen -->
<ImageView
android:id="@+id/upToYoursImageView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:contentDescription=""
app:srcCompat="@drawable/_title"/>
<EditText
android:id="@+id/code"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/targa"
android:ems="15"
android:fontFamily="sans-serif-condensed"
android:hint="Some text..."
android:inputType="textCapCharacters"
android:maxLength="15"
android:paddingLeft="60dp"
android:textColor="#222"
android:textColorHint="#222"
android:textColorLink="@android:color/holo_blue_bright"
android:textColorSecondary="#222"
android:textCursorDrawable="@drawable/cursor"
android:textSize="40sp"
android:textStyle="bold"
tools:ignore="HardcodedText,RtlHardcoded,RtlSymmetry" />
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="130dp"
android:layout_marginBottom="50dp"
android:layout_weight="0.50"
tools:ignore="InefficientWeight">
<Button
android:id="@+id/send_button"
style="@style/Widget.AppCompat.Button.Colored"
android:layout_width="170dp"
android:layout_height="170dp"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:background="@drawable/rounded_button"
android:foregroundGravity="center_vertical|center_horizontal"
android:text="Go!"
android:textAppearance="@style/TextAppearance.AppCompat.Display3"
android:textSize="38sp"
tools:ignore="HardcodedText" />
</RelativeLayout>
</LinearLayout>
</LinearLayout>
</RelativeLayout>
我想你可以添加一个 ScrollView 试试这个代码,我希望它能有所帮助
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#fff"
tools:context="com.archimedia.appToYours.MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:ignore="UselessParent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:weightSum="1">
<!-- this is what I want to shift up out of the screen -->
<ScrollView android:layout_height="wrap_content"
android:layout_width="match_parent">
<ImageView
android:id="@+id/upToYoursImageView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:contentDescription=""
app:srcCompat="@drawable/_title"/>
<EditText
android:id="@+id/code"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/targa"
android:ems="15"
android:fontFamily="sans-serif-condensed"
android:hint="Some text..."
android:inputType="textCapCharacters"
android:maxLength="15"
android:paddingLeft="60dp"
android:textColor="#222"
android:textColorHint="#222"
android:textColorLink="@android:color/holo_blue_bright"
android:textColorSecondary="#222"
android:textCursorDrawable="@drawable/cursor"
android:textSize="40sp"
android:textStyle="bold"
tools:ignore="HardcodedText,RtlHardcoded,RtlSymmetry" />
</ScrollView>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="130dp"
android:layout_marginBottom="50dp"
android:layout_weight="0.50"
tools:ignore="InefficientWeight">
<Button
android:id="@+id/send_button"
style="@style/Widget.AppCompat.Button.Colored"
android:layout_width="170dp"
android:layout_height="170dp"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:background="@drawable/rounded_button"
android:foregroundGravity="center_vertical|center_horizontal"
android:text="Go!"
android:textAppearance="@style/TextAppearance.AppCompat.Display3"
android:textSize="38sp"
tools:ignore="HardcodedText" />
</RelativeLayout>
</LinearLayout>
</LinearLayout>
</RelativeLayout>
我也有类似的需求。我解决它的方法是在根视图上监听 LayoutChanged 事件。一旦我看到视图的高度变小,我就假设键盘打开并做出相应的反应。 这是该方法的示例。希望对您有所帮助:
MainActivity.java
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.activity_main).addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
@Override
public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
if (bottom < oldBottom) {
// View got smaller in height
// In this case this means that the keyboard was opened
findViewById(R.id.upToYoursImageView).setVisibility(View.GONE);
} else {
// View got larger in height
findViewById(R.id.upToYoursImageView).setVisibility(View.VISIBLE);
}
}
});
}
}
AndroidManifest.xml
<activity android:name=".MainActivity"
android:windowSoftInputMode="adjustResize"/>