Ответ 1
для просмотра вы должны использовать
android:isScrollContainer="false"
и добавьте это в свою активность в manifest.xml
android:windowSoftInputMode="adjustPan"
У меня есть типичный listview
с edittext
и кнопка внизу операции.
Когда я нажимаю на edittext
, появляется мягкая клавиатура, я могу прокручивать элементы в listview
, но меняет размеры моего фонового изображения.
Я пробовал android:windowSoftInputMode="adjustResize"
, но никакой разницы.
Я пробовал android:windowSoftInputMode="adjustPan"
. Изображение не сжимается, весь макет сдвигается вверх, и я теряю заголовок. Я могу прокручивать список только в том случае, если элементы списка превышают размер макета.
В принципе, я хочу сохранить заголовок, сохранить фоновое изображение без повторной калибровки и разрешить прокрутку элементов списка. Кто-нибудь смог это сделать? Спасибо!
для просмотра вы должны использовать
android:isScrollContainer="false"
и добавьте это в свою активность в manifest.xml
android:windowSoftInputMode="adjustPan"
Я попытался, поэтому может решить проблемы для решения этой проблемы. android: windowSoftInputMode = "adjustPan" сделает весь экран с клавиатуры. Как правило, у нас есть заголовок экрана сверху. Используя этот флаг, он также выйдет из видимой области, что создает плохую работу пользователя. Я использую android:windowSoftInputMode="adjustResize"
Это изменит размер всего экрана, но это вызовет ту же проблему @Maurice в вопросе.
Итак, вот мое окончательное решение:
В манифесте
android:windowSoftInputMode="adjustResize|stateAlwaysHidden"
В XMl
Не устанавливайте фон здесь. И сохраняйте свое представление под ScrollView
В Java
Вам нужно установить фон в окно:
getWindow().setBackgroundDrawableResource(R.drawable.bg_wood) ;
Перейдите в Androidmanifest.xml и:
activity name="activityname" android:windowSoftInputMode="stateVisible|adjustPan"
Невозможно предотвратить изменение размера фоновой картинки на мягкой клавиатуре.
Используйте это scaleType(matrix)
и подготовьте подходящее изображение.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/RelativeLayoutchat"
>
<LinearLayout
android:orientation="horizontal"
android:gravity ="clip_horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_centerInParent="true">
<ImageView
android:gravity ="clip_horizontal"
android:id="@+id/chat_bak_img"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:scaleType="matrix">
</ImageView>
</LinearLayout>
<LinearLayout android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<ListView
android:id="@+id/chat"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:transcriptMode="alwaysScroll"
android:divider="#000000"
android:clickable="false"
android:layout_weight="9"
android:cacheColorHint="#00000000"/>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_weight="1"
style="@android:style/ButtonBar"
android:gravity="center"
android:paddingLeft="3dip"
android:paddingTop="3dip"
android:paddingRight="3dip">
<EditText
android:id="@+id/chatMsg"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:maxLines="5"
android:enabled="true"
android:textSize="17sp"
android:maxLength="150"/>
<Button
android:id="@+id/sendMsg"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="@string/send_withSpace"
android:layout_weight="4"/>
</LinearLayout>
</LinearLayout>
</RelativeLayout>
Используйте android:windowSoftInputMode="adjustResize"
и просто оберните фоновый ImageView в ScrollView.
<ScrollView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:scrollbars="none"
android:overScrollMode="never">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</ScrollView>
У меня та же проблема с изменением размера изображения при работе с клавиатурой вверх я решил с манифестным андроидом: windowSoftInputMode = "adjustPan", а следующий пример макета в моем случае
i.e frg_write_social:
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/frg_writeyourpost_ll_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true"
android:fitsSystemWindows="true"
android:isScrollContainer="false"
android:scrollbars="none" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<RelativeLayout
android:id="@+id/frg_writeyourpost_rl_top"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_above="@+id/frg_writeyourpost_ll_bottum"
android:layout_alignParentTop="true"
android:minHeight="400dip" >
<ImageView
android:id="@+id/frg_writyourpost_iv"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerInParent="true"
android:adjustViewBounds="true"
android:scaleType="fitXY" />
</RelativeLayout>
<LinearLayout
android:id="@+id/frg_writeyourpost_ll_bottum"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:orientation="vertical"
android:padding="10dp" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:layout_marginTop="10dp"
android:background="@android:color/white"
android:gravity="center"
android:orientation="vertical"
android:padding="10dp" >
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:gravity="center"
android:text="Write your post"
android:textColor="#727F8D"
android:textSize="10sp" />
<com.example.views.CustomEditText
android:id="@+id/frg_writeyourpost_et_message"
android:layout_width="match_parent"
android:layout_height="@dimen/slide_image"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:background="@null"
android:inputType="textMultiLine"
android:maxHeight="@dimen/slide_image"
android:maxLines="3"
android:textSize="11sp" >
</com.example.views.CustomEditText>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:orientation="horizontal" >
<TextView
android:id="@+id/frg_writeyourpost_tv_totalcharacter"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:text="0"
android:textColor="#727F8D"
android:textSize="8sp" />
<TextView
android:id="@+id/frg_writeyourpost_tv_characterLeft"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:gravity="center"
android:text="character"
android:textColor="#727F8D"
android:textSize="8sp" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="horizontal" >
<RadioGroup
android:id="@+id/frg_writepost_fbtw_rggroup"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<RadioButton
android:id="@+id/frg_writepost_rb_facebook"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@drawable/fb_check_selector"
android:button="@android:color/transparent"
android:gravity="center"
android:padding="10dip"
android:text="@string/post_for_facebook"/>
<View
android:layout_width="5dip"
android:layout_height="match_parent"
android:background="@android:color/transparent"/>
<RadioButton
android:id="@+id/frg_writepost_rb_twitter"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@drawable/tw_check_selector"
android:button="@android:color/transparent"
android:gravity="center"
android:padding="10dip"
android:text="@string/post_for_twitter"/>
</RadioGroup>
</LinearLayout>
</LinearLayout>
</LinearLayout>
если можно загружать изображение динамически, вы можете изменить размер изображения с помощью picaaso во время загрузки изображения.
Используйте ImageView с атрибутами fill_parent и centerCrop в RelativeLayout. Вот так:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<ImageView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:src="@drawable/yazisma_arka_plan"
android:scaleType="centerCrop"
/>
<ListView
android:id="@+id/messages_view"
android:layout_width="fill_parent"...
Эр, позвольте мне сначала посмотреть... фотографии!
<?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:background="@drawable/login_bkgd"
android:orientation="vertical"
android:paddingLeft="25dp"
android:paddingRight="25dp"
>
<ListView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:cacheColorHint="#0fff"
android:scrollbars="none"
android:listSelector="#0fff"
android:divider="#0fff"
android:dividerHeight="0dp"
android:isScrollContainer="true"
/>
<!--!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!-->
<!--android:isScrollContainer="true"-->
<!--!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!-->
<LinearLayout
android:id="@+id/loginItem"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical"
>
<ImageView
android:id="@+id/loginLogo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="35dp"
android:layout_marginTop="35dp"
android:scaleType="fitCenter"
android:src="@drawable/logo"
/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:paddingBottom="35dp"
>
<View
android:layout_width="0dp"
android:layout_height="1px"
android:layout_weight="1"
android:background="#Ffff"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="6dp"
android:layout_marginRight="6dp"
android:text="WELCOME"
android:textColor="#Ffff"
android:textSize="14sp"
/>
<View
android:layout_width="0dp"
android:layout_height="1px"
android:layout_weight="1"
android:background="#Ffff"
/>
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:background="@drawable/login_et_long"
android:gravity="center"
android:paddingLeft="10dp"
android:paddingRight="10dp"
>
<TextView
android:layout_width="60dp"
android:layout_height="wrap_content"
android:background="@null"
android:text="账号:"
android:textColor="#Ffff"
android:textSize="16sp"
/>
<EditText
android:id="@+id/loginUsername"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@null"
android:hint="请输入手机号"
android:imeOptions="actionNext"
android:inputType="text"
android:singleLine="true"
android:textColor="#F000"
android:textSize="16sp"
/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_marginBottom="45dp"
android:layout_marginTop="10dp"
android:background="@drawable/login_et_long"
android:gravity="center"
android:paddingLeft="10dp"
android:paddingRight="10dp"
>
<TextView
android:layout_width="60dp"
android:layout_height="wrap_content"
android:background="@null"
android:text="密码:"
android:textColor="#Ffff"
android:textSize="16sp"
/>
<EditText
android:id="@+id/loginPassword"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@null"
android:hint="请输入密码"
android:imeOptions="actionGo"
android:inputType="textPassword"
android:singleLine="true"
android:textColor="#F000"
android:textSize="16sp"
/>
</LinearLayout>
<TextView
android:id="@+id/login"
android:layout_width="match_parent"
android:layout_height="50dp"
android:background="@drawable/login_button"
android:gravity="center"
android:padding="10dp"
android:text="@string/str_login"
android:textColor="#Ffff"
android:textSize="19sp"
/>
</LinearLayout>
</LinearLayout>
</LinearLayout>
Связанные Java-коды.
EditText etUsername, etPassword;
EditText etFocus;
ViewGroup base;
int mSelection;
@Override
protected void onCreate(Bundle savedInstanceState) {
base=(ViewGroup)getLayoutInflater().inflate(R.layout.act_login, null);
setContentView(base);
getWindow().setBackgroundDrawable(base.getBackground());
base.setBackground(null);
super.onCreate(savedInstanceState);
}
@Override
protected void initViews() {
etUsername=(EditText)findViewById(R.id.loginUsername);
etPassword=(EditText)findViewById(R.id.loginPassword);
final ViewGroup item=(ViewGroup)findViewById(R.id.loginItem);
base.removeView(item);
final View[] items=new View[item.getChildCount()];
for(int i=0; i<item.getChildCount(); i++) items[i]=item.getChildAt(i);
item.removeAllViews();
ListView lv=(ListView)base.getChildAt(0);
lv.setAdapter(new BaseAdapter() {
public View getView(int i, View v, ViewGroup vg) {
if(etFocus!=null && getCurrentFocus()!=etFocus){
etFocus.requestFocus();
etFocus.setSelection(mSelection);
//etFocus=null;
}
return items[i];
}
public int getCount() {return items.length;}
public Object getItem(int position) {return null;}
public long getItemId(int position) {return 0;}
});
/*View.OnTouchListener listener=new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent e) {
if(e.getAction()!=MotionEvent.ACTION_UP) return false;
etFocus=(EditText)v;
mSelection=etFocus.getSelectionEnd();
ZZ.z("_________________ mSelection="+mSelection);
return false;
}
};
etUsername.setOnTouchListener(listener);
etPassword.setOnTouchListener(listener);*/
View.OnFocusChangeListener listener1=new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if(!hasFocus){
etFocus=(EditText)v;
mSelection=etFocus.getSelectionStart();
ZZ.z("_________________ mSelection="+mSelection);
}
}
};
etUsername.setOnFocusChangeListener(listener1);
etPassword.setOnFocusChangeListener(listener1);
}
Часть AndroidManifest.
<activity
android:name=".ui.activity.ActLogin"
android:label="@string/str_login"
android:theme="@style/myTheme"
/>
<!--android:windowSoftInputMode="adjustResize"-->
Часть стиля.
<style name="myTheme" parent="@android:style/Theme.Light.NoTitleBar">
<item name="android:windowTranslucentStatus">true</item>
</style>
Я прочитал много ответов по SO и взял некоторые из многих, чтобы мое приложение работало:
ScrollView
вообще в моем activity_main.xml
В AndroidManifest.xml
добавлен этот атрибут в
<activity
android:name=".MainActivity"
тег:
`android:windowSoftInputMode="adjustResize"`
MainActivity.java
внутри onCreate()
Я добавил getWindow().setBackgroundDrawableResource(R.drawable.app_bg);
Это работает для меня, когда все остальные полные ответы, которые я пробовал, не сделали. Если вы встанете сюда, я надеюсь, что это сработает и для вас.
Этот код не работает для меня:
android:windowSoftInputMode="adjustResize"
Но это работает:
android:windowSoftInputMode="adjustPan"
все, что вам нужно сделать, это установить фоновую гравитацию на вершину
<item android:drawable="@drawable/background_image" android:gravity="top"/>
Для тех, кто этого не понимает:
double ckeck, если в вашем xml
уже установлен @drawable
(для меня это была ошибка, я настраивал через Android-манифест, но он уже был установлен в корне xml)
После этого создайте стиль темы с фоном:
<style name="AppThemeWBackgroundG" parent="AppTheme">
<item name="android:windowBackground">@drawable/background_com_gradiente</item>
</style>
Затем в вашей деятельности на AndroidManifest.xml:
<activity
android:name=".TelaLoginFuncionario"
android:windowSoftInputMode="adjustResize|stateAlwaysVisible"
android:theme="@style/AppThemeWBackgroundG"
android:fitsSystemWindows="true"
/>
и что это: активность входит в экран с клавиатурой вверх, изменяя размеры элементов и фон остается в нормальном размере