Android: Как сделать содержимое под пользовательским макетом фокусируемым?

#android #layout #android-linearlayout #android-windowmanager

#Android #макет #android-linearlayout #android-windowmanager

Вопрос:

У меня следующий макет:

 <!-- TODO: MAKE EVERYTHING BELOW THIS LAYOUT FOCUSABLE-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="horizontal"
              android:layout_width="match_parent"
              android:layout_height="wrap_content">


    <TableLayout
        android:layout_width="match_parent"
        android:background="@color/colorPrimary"
        android:layout_height="wrap_content">

        <TableRow
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/original"
                android:layout_weight=".1"/>

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="New Text"
                android:layout_weight=".6"
                android:id="@ id/textViewSourceText"/>

            <Button
                style="?android:attr/buttonStyleSmall"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight=".2"
                android:text="X"
                android:id="@ id/closeButton"/>

        </TableRow>

        <TableRow
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/translation"
                android:layout_weight=".1"/>

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight=".9"
                android:text="New Text"
                android:id="@ id/textViewTranslatedText"/>
        </TableRow>
    </TableLayout>

</LinearLayout>
  

Который выдает:

введите описание изображения здесь

Указанный макет отображается в верхней части всех представлений с помощью:

 windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
            mInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            mParentLayout = (LinearLayout) mInflater.inflate(R.layout.result_layout,
                    null);
            textViewSourceText = (TextView) mParentLayout.findViewById(R.id.textViewSourceText);
            textViewTranslatedText = (TextView) mParentLayout.findViewById(R.id.textViewTranslatedText);
            WindowManager.LayoutParams params = new WindowManager.LayoutParams(
                    WindowManager.LayoutParams.TYPE_PHONE,
                    WindowManager.LayoutParams.FLAG_LOCAL_FOCUS_MODE,
                    PixelFormat.TRANSLUCENT);

            params.gravity = Gravity.TOP | Gravity.CENTER;
            //params.x = 0;
            //params.y = 100;

            windowManager.addView(mParentLayout, params);
  

Проблема в том, что я не могу сосредоточиться на любом другом контенте, если отображается макет.

Я хотел бы спросить:

Как я могу сделать содержимое ниже сфокусированным, пожалуйста?

Большое спасибо за любые советы.

введите описание изображения здесь

Ответ №1:

Есть два варианта, которые вы можете попробовать :

1- используйте WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE при определении params .

2- сделайте текстовые представления фокусируемыми :

 textViewSourceText.setFocusable(false) ;
textViewSourceText.setFocusableInTouchMode(false) ;

textViewTranslatedText.setFocusable(false) ;
textViewTranslatedText.setFocusableInTouchMode(false) ;
  

Комментарии:

1. Спасибо, но я думал, что содержимое под макетом можно фокусировать, это означает, что, например, страница в браузере, которая находится под отображаемым пользовательским макетом, должна быть прокручиваемой.