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 - уменьшенное изображение. Мне нужно, чтобы нижний колонтитул и фон сдвигались вверх по клавиатуре.
Что мне не хватает или что-то не так, пожалуйста, предложите мне.
Ответы
Ответ 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" >