25

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

<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" 

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

Edit:

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

Image 1

И после того, как поп-вверх, как:

Image 2

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

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

+0

'adjustPan' должен делать именно то, что вам нужно (_«Главное окно на данном виде деятельности не изменяются, чтобы освободить место для мягкой клавиатуры. Скорее всего, содержимое окна автоматически приготовлены»_), см [документы ] (https://developer.android.com/guide/topics/manifest/activity-element.html). Какая у вас проблема с этим? – matiash

+0

Этот вопрос является дубликатом [этого] (http://stackoverflow.com/questions/4287473/software-keyboard-resizes-background-image-on-android). – Lamorak

+0

Почему вы не помещаете изображение на фоне прокрутки? или создать образное изображение без отношения, которое заполняет все пространство экрана и устанавливает его как фон, потому что его relatvielayout. – Elltz

ответ

-5

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

<?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" > 
+0

Это бесполезно. Фон также сокращается. –

+0

Я спрашиваю о фоновом изображении. Вы не упоминали об изображении и его сокращении. –

0

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

+0

Я пробовал это, но он не работает, так как при поиске я узнаю, что это связано с просмотром прокрутки в моем макете. –

+0

Возможно, из-за вашего AndroidManifest.xml вы можете скопировать код манифеста и вставить здесь? –

1

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

android:isScrollContainer="false" 

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

Кроме того, добавить к вашей деятельности в Manifest.xml

android:windowSoftInputMode="adjustPan" 

Надеется, что это помогает .. !! :)

+0

хм, спасибо, это тоже работает для listview – HendraWD

2

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

<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 значения для того чтобы достигнуть желаемого эффекта. Если вы хотите, чтобы изображение было обрезано сверху, а не средней средней по умолчанию, см. here о том, как этого достичь, или попробуйте использовать библиотеку this.

7

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

Что вы можете сделать, это деятельности.

активность 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: Для завершения деятельности сразу использовать следующие где-то внутри DialogActivity (пример: переопределить BackButton):

@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

Нажал окно EditText Clicked textbox

После прокрутила (пс: я положил текстовое поле внутри Scrollview Вот почему его нет;)) after scrolled down

Я хоп e это поможет вам;)

1

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

20

Просто использовать в 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

+0

@ManojFegde у вас есть продвижение? –

+0

Спасибо за ваше предложение и извините за поздний ответ. Я попробовал ваш ответ. Его работа, но то, что мне нужно, - фоновое изображение должно сдвигаться на клавиатуре, а не скрываться за ней. –

+0

@ManojFegde Вы можете изменить свой вопрос с изображением того, что вы хотите, пожалуйста? –

0

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

-1

Вы должны использовать опцию adjustResize для настройки windowSoftInputMode на Activity в вашем файле AndroidManifest.xml.

0

Почему бы вам не нравится эта

<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> 
5

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

android:windowSoftInputMode="stateHidden|adjustResize|adjustPan" 
+0

Это отличный простой человек, спасибо :) – Antarix

+0

чувствует себя хорошо, чтобы наконец получить замечание – mushahid

+0

btw, если вы не хотите, чтобы клавиатура была скрыта, когда вы начинаете свою деятельность, вы можете пропустить часть 'stateHidden' – mushahid