将焦点设置在 LinearLayout 上
Setting focus on LinearLayout
我试图在从另一个 activity 返回到 activity 时将焦点设置在 LinearLayout 视图上。场景:
我有一个 activity 有一堆 LinearLayout 项目(里面有东西),其中一些是文本,其他是照片。假设前 20 个是 TextView,其余是照片。当我离开这个 activity(拍照)时,activity 会转到 TextView 所在的列表的顶部 - 无论我做什么。
如何将焦点强制返回到触发新 activity 之前我所在的项目?
我已经试过了,但没有成功:
[How Linear Layout get Focus?
我目前正在尝试通过记住之前的视图来强制聚焦,但没有成功(尽管我可以看到正在执行的代码)。在我的主要 activity:
@Override
public void onResume() {
super.onResume();
// See if we had a field with focus previously...
if (mPreviousView != null) {
if (mPreviousView.isFocusable()) {
mPreviousView.requestFocus();
}
}
}
...
@Override
protected void onPause() {
super.onPause();
mPreviousView = this.getCurrentFocus();
}
我在 LinearLayout 中动态设置焦点:
private void initialize() {
LayoutInflater inflater = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.field_photo_picker, this);
// To allow focus to be returned to control after taking photo
this.setFocusableInTouchMode(true);
this.setFocusable(true);
this.setClickable(true);
最后是 LinearLayout 的 XML:
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="5dp"
android:paddingBottom="5dp">
<TextView
android:id="@+id/name"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="18sp"
android:textStyle="normal"
android:text="" />
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/photoValue"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:textSize="17sp"
android:textStyle="normal"
android:gravity="right|center_vertical"
android:layout_weight="1"
android:layout_marginRight="5dp"
android:text="" />
<ImageButton
android:id="@+id/photoPicker"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/form_photo"
android:padding ="5dp"
android:gravity="center_vertical"
android:focusableInTouchMode="false"
android:background="?android:attr/selectableItemBackground"
android:layout_weight="0"
/>
</LinearLayout>
<View
android:layout_marginTop="8dp"
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/grey" />
</LinearLayout>
</merge>
你的 textview
和其他观点 focusable
,你 this.setFocusable(true);
没有意义
我试图在从另一个 activity 返回到 activity 时将焦点设置在 LinearLayout 视图上。场景:
我有一个 activity 有一堆 LinearLayout 项目(里面有东西),其中一些是文本,其他是照片。假设前 20 个是 TextView,其余是照片。当我离开这个 activity(拍照)时,activity 会转到 TextView 所在的列表的顶部 - 无论我做什么。
如何将焦点强制返回到触发新 activity 之前我所在的项目?
我已经试过了,但没有成功:
[How Linear Layout get Focus?
我目前正在尝试通过记住之前的视图来强制聚焦,但没有成功(尽管我可以看到正在执行的代码)。在我的主要 activity:
@Override
public void onResume() {
super.onResume();
// See if we had a field with focus previously...
if (mPreviousView != null) {
if (mPreviousView.isFocusable()) {
mPreviousView.requestFocus();
}
}
}
...
@Override
protected void onPause() {
super.onPause();
mPreviousView = this.getCurrentFocus();
}
我在 LinearLayout 中动态设置焦点:
private void initialize() {
LayoutInflater inflater = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.field_photo_picker, this);
// To allow focus to be returned to control after taking photo
this.setFocusableInTouchMode(true);
this.setFocusable(true);
this.setClickable(true);
最后是 LinearLayout 的 XML:
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="5dp"
android:paddingBottom="5dp">
<TextView
android:id="@+id/name"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="18sp"
android:textStyle="normal"
android:text="" />
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/photoValue"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:textSize="17sp"
android:textStyle="normal"
android:gravity="right|center_vertical"
android:layout_weight="1"
android:layout_marginRight="5dp"
android:text="" />
<ImageButton
android:id="@+id/photoPicker"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/form_photo"
android:padding ="5dp"
android:gravity="center_vertical"
android:focusableInTouchMode="false"
android:background="?android:attr/selectableItemBackground"
android:layout_weight="0"
/>
</LinearLayout>
<View
android:layout_marginTop="8dp"
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/grey" />
</LinearLayout>
</merge>
你的 textview
和其他观点 focusable
,你 this.setFocusable(true);
没有意义