【问题标题】:Setting focus on LinearLayout将焦点放在 LinearLayout 上
【发布时间】:2015-04-08 19:15:23
【问题描述】:

当从另一个活动返回到一个活动时,我试图将焦点设置在 LinearLayout 视图上。场景:

我有一个包含一堆 LinearLayout 项目(其中有东西)的活动,其中一些是文本,另一些是照片。假设 20 个中的大部分是 TextView,其余的是照片。当我离开这个活动(拍照)时,无论我做什么,活动都会进入 TextView 所在的列表顶部。

如何强制将焦点重新放在触发新活动之前我所在的项目上?

我已经尝试过了,但没有成功:

[How Linear Layout get Focus?

我目前正试图通过记住前一个视图来强制聚焦,但没有成功(尽管我可以看到正在执行的代码)。在我的主要活动中:

	@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>

【问题讨论】:

  • 尝试将您的 mPreviousView 作为静态存储在其他地方,这样当活动被破坏时它就不会丢失
  • 它不会迷路。我可以走到那里,看到它很高兴。只是没有得到焦点。
  • mPreviousView.requestFocus(); 是否被调用?检查
  • 也让你的 textview 和其他视图成为焦点,你做了this.setFocusable(true); 这没有意义
  • 它确实命中了 requestFocus() 的代码并返回 true,但我会尝试使其余包含的视图也具有焦点。

标签: android android-linearlayout setfocus


【解决方案1】:

让你的textview 和其他观点focusable,你创造了this.setFocusable(true); 这没有意义

【讨论】:

  • 虽然这似乎已经解决了大多数焦点问题,但我仍然有一个问题,如果 TextView 有焦点并且我调用另一个 Activity,即使我将焦点强制到激活的字段Activity,它仍然将焦点返回给先前具有焦点的 TextView。但是,如果 TextView 没有焦点,一切正常。
猜你喜欢
  • 2013-03-24
  • 1970-01-01
  • 1970-01-01
  • 2020-07-04
  • 2013-03-28
  • 2020-04-30
  • 2018-08-31
  • 2015-08-16
  • 2014-09-01
相关资源
最近更新 更多