2016-02-12 2 views
0

Фон для верхней части экрана использует следующую тему и должен быть прозрачным. В портретном режиме фон становится черным. Иногда это даже не происходит, и фон остается прозрачным. Чтобы проверить это, я использую текстовое приложение TED. Как я уже сказал, фон в черном режиме в TED. Я написал свою собственную деятельность с многострочным текстовым полем ввода, и в этом действии фон отображается правильно. В другом примере фон в моем приложении Gmail становится белым в портретном режиме, когда я пытаюсь создать новое электронное письмо.Редактор метода ввода Android работает в ландшафте, но не портрет

Я также показываю некоторые макеты IME ниже.

<resources> 
     <!-- some styles here --> 

     <style name="AppTheme.Custom" parent="AppTheme.NoActionBar"> 
      <item name="android:windowActionBar">false</item> 
      <item name="android:windowNoTitle">true</item> 
      <item name="android:windowIsTranslucent" >false</item> 
      <item name="android:windowIsFloating">true</item> 
      <item name="android:windowCloseOnTouchOutside">true</item> 
      <item name="android:colorBackgroundCacheHint">@android:color/transparent</item> 
      <item name="android:backgroundDimEnabled">false</item> 
      <item name="android:windowContentOverlay">@android:color/transparent</item> 
      <item name="android:backgroundDimAmount">0.5</item> 
     </style> 
    </resources> 

Вот некоторые из макета для IME:

<?xml version="1.0" encoding="utf-8"?> 
    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_alignParentBottom="true" 
     > 

     <LinearLayout 
      android:orientation="vertical" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:weightSum="1" 
      android:theme="@style/AppTheme"> 

      <LinearLayout 
       android:background="#00000000" 
       android:orientation="horizontal" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:layout_weight="0.5" 
       android:theme="@style/AppTheme.Custom" 
       android:layout_gravity="top" 
       android:id="@+id/topHalf"></LinearLayout> 

      <include layout="@layout/content_main" 
       android:layout_weight="0.5" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:theme="@style/AppTheme" 
       android:layout_gravity="bottom" 
       /> 

     </LinearLayout> 

    </FrameLayout> 

ответ

0

так, если я использую макет, чтобы заполнить экран, а затем разделим макет в два с использованием весов, а затем сделать верхнюю половину макет прозрачный, который не будет работать, потому что, когда вы щелкаете в прозрачной области, это все еще внутри макета, и правило стиля работает, поскольку оно говорит «windowCloseOnTouchOutside». Мне нужно было создать единый макет, охватывающий весь экран, а затем программно измерить весь экран, а re установить размер макета на половину размера экрана (снова программно) и установить гравитацию в BOTTOM. Ниже приведен код для измерения размера экрана, а ниже - код для изменения размера макета.

WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE); 
    Display display = wm.getDefaultDisplay(); 
    DisplayMetrics metrics = new DisplayMetrics(); 
    display.getMetrics(metrics); 
    val.mWindowHeight = metrics.heightPixels; 
    val.mWindowWidth = metrics.widthPixels; 

изменить размер макета. в моем случае мне нужно раздуть макет самостоятельно.

inputView = (RelativeLayout) getLayoutInflater().inflate(R.layout.content_main, null); 
    ... 
    FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, val.mWindowHeight/2); 
    lp.gravity = Gravity.BOTTOM ; 
    lp.height = val.mWindowHeight/2; 
    inputView.setLayoutParams(lp); 

Я надеюсь, что это кому-то поможет.