Frage

Ich habe ein paar Elemente in einem RelativeView mit dem align Boden-Attribute gesetzt ist, wenn die Soft-Tastatur kommt die Elemente von der Soft-Tastatur versteckt.

Ich mag sie so bewegen, dass, wenn es genug Platz auf dem Bildschirm ist, werden sie über der Tastatur angezeigt, oder den Abschnitt oberhalb der Tastatur scrollbaren zu machen, damit der Benutzer immer noch die Elemente sehen kann.

Alle Ideen, wie man diesen Ansatz?

War es hilfreich?

Lösung

Ja Besuche diesem Artikel auf der Android Entwickler-Website die beschreibt, wie die Rahmen Griffe die Soft-Tastatur erscheint.

Das android:windowSoftInputMode Attribut verwendet werden kann, um festzulegen, was auf einer Pro-Aktivität Basis geschieht., Ob das Layout der Größe verändert wird, oder ob es scrollt etc

Andere Tipps

Sie können auch diesen Code in onCreate() Methode verwenden:

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);

Fügen Sie in AndroidManifest.xml für Ihre Aktivität:

android:windowSoftInputMode="adjustPan|adjustResize"

Änderungen in der Aktivität Ihrer Manifest-Datei wie

windowSoftInputMode="adjustResize"

oder

Nehmen Sie Änderungen in Ihrer onCreate() Methode in der Aktivitätsklasse wie

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);

ähnliches Problem i war vor mit meinem Layout, die Bildlaufansicht innen bestehen. Jedes Mal, wenn ich versuche, Text zu markieren in EditText, Kopieren / Ausschneiden / Einfügen Aktionsleiste wird mit folgendem Code als solche nach oben bewegt, es funktioniert nicht Resize Layout

android:windowSoftInputMode="adjustPan"

Durch sie wie unten modifizierenden

1) AndroidManifest.xml

android:windowSoftInputMode="stateVisible|adjustResize"

2) style.xml Datei, in der Aktivität Stil

<item name="android:windowActionBarOverlay">true</item>

Es funktionierte. !!!!!!!!!!!!

In AndroidManifest.xml, nicht vergessen Satz:

 android:windowSoftInputMode="adjustResize"

und für RelativeLayout innerhalb Scrollview, festlegen:

 android:layout_gravity="center" or android:layout_gravity="bottom" 

es wird in Ordnung sein

für Aktivität in seinem oncreate Methode Einsatz unterhalb der Linie

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);

und für Fragmente in seiner onCreate Methode

getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);

Es gibt 3 Schritte, um Scroll-Bildschirm.

folgen
  1. Schreiben in Manifest-Datei für Ihre Tätigkeit:
  

Android: windowSoftInputMode = "adjustResize"

  1. Fügen Sie folgende Zeile in oncreate () -Methode Ihrer Aktivität
  

getWindow () setSoftInputMode (WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE | WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);.

  1. Dann legen Sie Ihre ganze Sicht in "Scroll" in XML-Datei wie:
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:background="@drawable/bg"
    android:layout_height="match_parent" 
    > 
    <RelativeLayout
         android:layout_width="fill_parent"
        android:layout_height="match_parent"
        android:layout_gravity="center" >
        <TextView />
         .........
        <TextView />
        <EditText >
            <requestFocus />
        </EditText>
        <Button />
    </RelativeLayout>
 </ScrollView>

P. S. Vergessen Sie nicht, hinzuzufügen android. layout_gravity = "center" in Mutter Relative Layout

ich eine Methode von Diego Ramírez versucht, es funktioniert. In AndroidManifest:

    <activity
        android:name=".MainActivity"
        android:windowSoftInputMode="stateHidden|adjustResize">
        ...
    </activity>

In activity_main.xml:

<LinearLayout ...
    android:orientation="vertical">

<Space
    android:layout_width="wrap_content"
    android:layout_height="0dp"
    android:layout_weight="1" />

<EditText
    android:id="@+id/edName"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:ems="10"
    android:hint="@string/first_name"
    android:inputType="textPersonName" />

<EditText ...>
...
</LinearLayout>

Ich habe eine Lösung für meine Probleme gefunden, dass es wie bei Ihnen ziemlich gleiche ist.

Zunächst einmal, ich habe nur ein Linearlayout mit zwei Elementen, einem Image und einem Linearlayout Wich enthält 2 EditText und ein Knopf, so musste ich sie getrennt halten in vollem Umfang nutzen, ohne Tastatur, und wenn die Tastatur erscheint, sollten sie aussehen näher.

hinzugefügt, damit ich die Ansicht zwischen ihnen mit der Höhe Attribut in 0DP und Gewicht 1, das lassen Sie mich halten meine Ansichten trennen man einander bilden. und wenn die Tastatur Appers, da sie nicht über eine fixe Höhe haben, sie nur die Größe und das Aussehen behalten.

Voila! Das Layout Resize und der Abstand zwischen meinen Ansichten ist das gleiche, wenn die Tastatur ist oder nicht vorhanden ist.

Hier ist voll manifest Code

<activity
        android:name=".activities.MainActivity"
        android:windowSoftInputMode="adjustResize"
        android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

Wenn Sie in Fragmente sind, dann müssen Sie die folgenden Code in Ihre onCreate auf Ihrer Aktivität hinzufügen löst es Problem für mich

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN | WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);

In Ihrer Manifest-Datei hinzufügen, die unterhalb der Linie. Es wird funktionieren

<activity name="MainActivity"
    android:windowSoftInputMode="stateVisible|adjustResize">
    ...
</activity>

Okay das ist sehr spät aber ich habe festgestellt, dass, wenn Sie eine Listenansicht unter dem Bearbeiten von Text fügen Sie dann die Tastatur alle Layouts unter diesem EditText bewegen wird, ohne dass die Listview zu bewegen

<EditText
android:id="@+id/et"
android:layout_height="match_parent"
android:layout_width="match_parent"



/>

<ListView
    android:layout_width="match_parent"
    android:layout_height="match_parent"//can make as 1dp
    android:layout_below="@+id/et" // set to below editext
    android:id="@+id/view"
    >
**<any layout**

Dies ist die einzige Lösung, die für mich gearbeitet.

Here is the solution for this fix
- android:windowSoftInputMode="adjustResize" in Manifest File
- Make a class "CommentKeyBoardFix.Java" and copy and paste the below code.

public class CommentKeyBoardFix
{
private View mChildOfContent;
private int usableHeightPrevious;
private FrameLayout.LayoutParams frameLayoutParams;
private Rect contentAreaOfWindowBounds = new Rect();

public CommentKeyBoardFix(Activity activity)
{
    FrameLayout content = activity.findViewById(android.R.id.content);
    mChildOfContent = content.getChildAt(0);
    mChildOfContent.getViewTreeObserver().addOnGlobalLayoutListener(this::possiblyResizeChildOfContent);
    frameLayoutParams = (FrameLayout.LayoutParams) mChildOfContent.getLayoutParams();
}

private void possiblyResizeChildOfContent()
{
    int usableHeightNow = computeUsableHeight();
    if (usableHeightNow != usableHeightPrevious)
    {
        int heightDifference = 0;
        if (heightDifference > (usableHeightNow /4))
        {
            // keyboard probably just became visible
            frameLayoutParams.height = usableHeightNow - heightDifference;
        }
        else
        {
            // keyboard probably just became hidden
            frameLayoutParams.height = usableHeightNow;
        }
        mChildOfContent.layout(contentAreaOfWindowBounds.left, contentAreaOfWindowBounds.top, contentAreaOfWindowBounds.right, contentAreaOfWindowBounds.bottom);
        mChildOfContent.requestLayout();
        usableHeightPrevious = usableHeightNow;
    }
}

private int computeUsableHeight()
{
    mChildOfContent.getWindowVisibleDisplayFrame(contentAreaOfWindowBounds);
    return contentAreaOfWindowBounds.height();
}
}

And then call this class in your Activity or Fragment
setContentView(R.layout.your_comments_layout)
CommentKeyBoardFix(this) ---> For Kotlin
or
new CommentKeyBoardFix(this) ---> For Java

Ich habe gerade die folgende Zeile in der obersten Ebene Layout hinzugefügt und alles hat funktioniert:

android:fitsSystemWindows="true"
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top