Подтвердить что ты не робот

Android: изменение размера фонового изображения на клавиатуре

Я разрабатываю приложение, в котором фоновое изображение становится сжатым во всплывающем меню. Мой .xml выглядит следующим образом:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:facebook="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/background" >

    <ScrollView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >

        <RelativeLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" >

            /**
              Other stuff 
            */

        </RelativeLayout>
    </ScrollView>
</RelativeLayout>

Я искал в Google и обнаружил, что добавить

android:windowSoftInputMode="stateVisible|adjustPan"

в моем файле манифеста. Но это бесполезно.

Изменить:

Мой макет перед всплывающей подсказкой выглядит так:

Image 1

И после всплывающего окна, как:

Image 2

Пожалуйста, проверьте разницу в фоновом изображении. На изображении 1 изображение имеет размер, а на изображении 2 - уменьшенное изображение. Мне нужно, чтобы нижний колонтитул и фон сдвигались вверх по клавиатуре.

Что мне не хватает или что-то не так, пожалуйста, предложите мне.

4b9b3361

Ответ 1

Просто используйте в своем onCreate() этот код:

protected void onCreate(Bundle savedInstanceState) {
...   
 getWindow().setBackgroundDrawableResource(R.drawable.your_image_resource);
...
}

и устранить эту строку в вашем XML:

android:background="@drawable/background"

Подробнее:

http://developer.android.com/reference/android/view/Window.html

Ответ 2

Хорошо, если я правильно задал вопрос, вам нужен макет с фоном и прокруткой. И когда всплывает программная клавиатура, вы хотите изменить размер прокрутки, но сохранить фон в полном размере правильно? если это то, что вы хотите, чем я, возможно, нашел обходное решение для этой проблемы:

Что вы можете делать 2.

Действие 1:

public class StartActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    Intent StartApp = new Intent(this, DialogActivity.class);
    startActivity(StartApp);         // Launch your official (dialog) Activity

    setContentView(R.layout.start);  // your layout with only the background 
    }
}

деятельности2:

public class DialogActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    this.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);  // get rid of dimming
    this.requestWindowFeature(Window.FEATURE_NO_TITLE);  //get rid of title bar (if you want)

    setContentView(R.layout.dialog);  //Dialog Layout with scrollview and stuff

    Drawable d = new ColorDrawable(Color.BLACK);  //make dialog transparent
    d.setAlpha(0);
    getWindow().setBackgroundDrawable(d);
    }
}

начальный макет:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" 
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/test">  //your background
</LinearLayout>

диалоговое окно:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="fill_parent"
android:layout_width="fill_parent">

    <ScrollView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">

            <LinearLayout
                android:orientation="vertical"     
                android:layout_width="match_parent"
                android:layout_height="match_parent">

                <!-- All your Scrollview Items -->

            </LinearLayout>
     </ScrollView>
</RelativeLayout>

AndroidManifest.xml

начать работу:

android:theme="@android:style/Theme.NoTitleBar.Fullscreen">

диалог

android:theme="@android:style/Theme.Dialog"
android:windowSoftInputMode="adjustResize"
android:excludeFromRecents="true"

Edit: Чтобы закончить действия сразу, используйте следующее внутри вашего диалогового окна (пример: переопределить подкладку):

@Override
public void onBackPressed() {
    Intent intent = new Intent(getApplicationContext(), StartActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    intent.putExtra("EXIT", true);
    startActivity(intent);
}

и onCreate() для StartActivity:

if (getIntent().getBooleanExtra("EXIT", false)) {
    finish();
}
else {
    Intent StartApp = new Intent(this, TestActivity.class);
    startActivity(StartApp);
}

Скриншоты

Normal Normal

Нажмите на поле EditText Clicked textbox

После прокрутки вниз (ps: я поместил текстовое поле внутри scrollview, поэтому его не удалось;)) after scrolled down

Я надеюсь, что это поможет вам;)

Ответ 3

Я столкнулся с подобной проблемой один раз, моя была решена с использованием нижеприведенных свойств в манифесте, использующих ее там, где объявлена ​​ваша деятельность.

 android:windowSoftInputMode="stateHidden|adjustResize|adjustPan"

Ответ 4

Эй вы можете попробовать добавить это

android:isScrollContainer="false" 

в ScrollView. Он однажды решил мою проблему. Может помочь и вам.

Кроме того, добавьте это в свою активность в manifest.xml

android:windowSoftInputMode="adjustPan"

Надеюсь, это поможет..!!:)

Ответ 5

Вы должны переместить android:background="@drawable/background" в ImageView выше ScrollView. Когда клавиатура всплывает, она значительно уменьшает экран и, имея изображение в качестве фона, вы не можете контролировать, как он изменяется/обрезается. Итак, предполагая, что вы хотите иметь полную ширину изображения, но сохраняйте соотношение сторонности:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:facebook="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <ImageView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:src="@drawable/background"
        android:scaleType="centerCrop" />

    <ScrollView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >
        <RelativeLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" >           
            /**
            Other stuff
            */
        </RelativeLayout>
    </ScrollView>
</RelativeLayout>

Вы можете попробовать разные значения android:scaleType для достижения желаемого эффекта. Если вы хотите, чтобы изображение было обрезано сверху, а не средней средней по умолчанию, см. здесь о том, как этого достичь, или попробуйте использовать эта библиотека

Ответ 6

Отметьте этот ответ, основной трюк заключается в том, что вы не устанавливаете фон в макет, а в окно. Это можно сделать из действия с помощью getWindow().setBackgroundDrawable(), или вы можете установить его в теме своей деятельности.

Ответ 7

Вместо android:windowSoftInputMode="stateVisible|adjustPan" вы должны перейти на android:windowSoftInputMode="stateVisible|adjustResize". Это сработало для меня.

Ответ 8

Используйте ScrollView в качестве верхнего родителя. При открытии и закрытии клавиатуры он будет автоматически прокручиваться вверх и вниз.

Ответ 9

Вам действительно нужен основной RelativeLayout?

Потому что, если вы этого не сделаете, попробуйте использовать его следующим образом:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:facebook="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/background" >

    <RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" >

        /**
          Other stuff 
        */

    </RelativeLayout>
</ScrollView>

Ответ 10

Почему бы вам не сделать это?

    <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"

        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:fillViewport="true"
        android:focusable="true"
        android:background="@drawable/background"
        android:focusableInTouchMode="true">

        <RelativeLayout
            android:id="@+id/relative"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:focusable="true"
            android:focusableInTouchMode="true"
    /**
              Other stuff 
            */
    >
  </RelativeLayout>
  </ScrollView>

Ответ 11

Я использую нижестоящую иерархию и ее работу для меня:

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

    <ScrollView
        android:id="@+id/rfqItemsParentScrollView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical" >