アクションが発生したときに特定のフィールドを表示したいシナリオがあります。これはうまくいきますが、TextEditなどのいくつかのフィールドを含むLinearLayoutでsetVisible(View.VISIBLE)を呼び出すと、フォーカスがTextEditに移動します(または少なくとも画面がスクロールします)。setVisibility(View.VISIBLE)を呼び出すときにフォーカスを変更しない
setVisibility(View.VISIBLE)を呼び出すときにフォーカスを変更しない方法はありますか?
私は上のsetVisibleを呼び出すことができますのLinearLayoutのXMLレイアウト:
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:focusable="true"
android:focusableInTouchMode="true">
<TextView
android:id="@+id/name"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="18sp"
android:textStyle="normal"
android:paddingLeft="5dp"
android:paddingRight="5dp"
android:paddingBottom="5dp"
android:text="" />
<EditText android:id="@+id/entry"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:inputType="textMultiLine"
android:gravity="right" />
<View
android:layout_marginTop="8dp"
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/grey"
android:visibility="gone" />
</LinearLayout>
それを初期化するコード:
private TextView mName;
private EditText mEntry;
が...
private void initialize() {
LayoutInflater inflater = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.field_multiline_entry, this);
// setup fields
mName = (TextView)findViewById(R.id.name);
mEntry = (EditText)findViewById(R.id.entry);
mEntry.addTextChangedListener(textWatcher);
}
とコードsetVisibilityを呼び出しています:
if(sectionFieldView != null && sectionFieldView.getVisibility() != View.VISIBLE)
{
sectionFieldView.setVisibility(View.VISIBLE);
}
ありがとうございました!
UPDATE以下の私の友人に
おかげで、次のコードは動作します。基本的には、LinearLayoutのすべての子孫がフォーカスを得ることができなくなります。つまり、フォーカスが得られないときに画面がスクロールしないようにすることを意味します。私が起きてからこれを維持することが分かってきたこれまでの唯一の方法...
((ViewGroup) fieldView).setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);
fieldView.setVisibility(View.VISIBLE);
((ViewGroup) fieldView).setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS);
これは、実行時に発生する必要があります 'editText.setFocusable(偽)' – Jas