0

バックグラウンド

アクティビティの次のレイアウトがあります。

  • 垂直LinearLayout
    • viewPagerを備えたTabHost。
    • 「ステータスバー」(imageView / textView)。

時々、viewPagerに、EditTextを持つフラグメントがあります。

問題

一部の画面(ギャラクシーミニなど)では、(書き込むために)editTextをクリックすると、ソフトキーボードがすべてを非表示にするため、actionBar、タブ、ステータスバーのみが表示されることに気付きました。 。

私が試したこと

そのため、このアクティビティのマニフェストに次のフラグを追加することにしました。

android:windowSoftInputMode="adjustPan|adjustResize|stateHidden"

これは完璧な解決策のように見えました-入力時にアクションバー、タブ、さらにはステータスバーを非表示にし、editTextを表示する(そしてスクロールする)ための十分なスペースを残します。

ただし、より大きな画面(Galaxy S3の画面など)でテストすると、editTextが下部にある場合に、softKeyboardがeditTextをカバーするようになりました。

大画面では正常に機能するadjustPanフラグを削除しようとしましたが、小画面では、editTextまでスクロールしても、ステータスバーで非表示になります。

また、 isScrollContainerを一部のビューに対してtrueに設定しようとしましたが、編集時にサイズが変更されることを期待していますが、何もしませんでした。

質問

この問題を修正し、あらゆる種類の画面を処理するにはどうすればよいですか?

画面の種類を確認し、プログラムで適切なフラグを使用することはできますが(ここのように)、ルール(密度/解像度/画面サイズ)がどうあるべきか、そして本当にすべての種類をカバーしているかどうかはわかりません。

4

1 に答える 1

1

試すandroid:windowSoftInputMode="adjustPan

追加機能付き

このような別のクラスを作成します

package com.example.customLayout;

import android.content.Context;
import android.util.AttributeSet;
import android.widget.RelativeLayout;

public class MyRelativeLayout extends RelativeLayout
{
    private OnRelativeLayoutChangeListener layoutChangeListener;

    public interface OnRelativeLayoutChangeListener 
    {
        void onLayoutPushUp();
        void onLayoutPushDown();
    }

    public MyRelativeLayout(Context context, AttributeSet attributeSet) 
    {
        super(context, attributeSet);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) 
    {
        try 
        {
            final int proposedheight = MeasureSpec.getSize(heightMeasureSpec);
            final int actualHeight = getHeight();
            if (actualHeight > proposedheight)
            {
                // Keyboard is shown
                layoutChangeListener.onLayoutPushUp();
            }
            else if(actualHeight < proposedheight)
            {
                // Keyboard is hidden
                layoutChangeListener.onLayoutPushDown();
            }
        } 
        catch (Exception e) 
        {
            e.printStackTrace();
        }   

        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    }

    public void setLayoutChangeListener(OnRelativeLayoutChangeListener layoutChangeListener) 
    {
        this.layoutChangeListener = layoutChangeListener;
    }

    public OnRelativeLayoutChangeListener getLayoutChangeListener() 
    {
        return layoutChangeListener;
    }
}

このクラスのカスタム ビューをレイアウト xml ファイルの親として作成します。

<com.example.customLayout.MyRelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:custom="http://schemas.android.com/apk/res/com.example.customLayout"

    android:id="@+id/customRelativeLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">


// your original layout file

</com.example.customLayout.MyRelativeLayout>

Javaファイルで次のコードを試してください

myRelativeLayout=(MyRelativeLayout)findViewById(R.int.customRelativeLayout);

 myRelativeLayout.setLayoutChangeListener(new OnRelativeLayoutChangeListener() {

                public void onLayoutPushUp() 
                {
                    Controller_Test1.tabWidget.setVisibility(View.GONE);    
                }

                public void onLayoutPushDown() 
                {
                    Controller_Test1.tabWidget.setVisibility(View.VISIBLE);
                }
            });
于 2013-02-05T10:05:08.290 に答える