我正在开发一个应用程序,其中背景图像在键盘弹出窗口中缩小。我的.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"
在我的清单文件中。但它毫无用处。
修改:
弹出键盘前的我的布局如下:
弹出后像:
请检查背景图片的差异。在图像1中,图像的大小和图像2的背景图像缩小。我需要在键盘弹出窗口向上移动页脚和背景。
我错过了什么或做错了请建议我。
答案 0 :(得分:34)
只需在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
答案 1 :(得分:7)
好的,如果我的问题正确,你需要一个带背景和滚动视图的布局。当弹出软键盘时,您想要调整滚动视图的大小,但保持背景的大小正确吗? 如果这就是你想要的东西,那么我可能找到了解决这个问题的方法:
>做的是 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"
修改强> 要立即完成活动,请在DialogActivity中使用以下内容(例如:覆盖后退按钮):
@Override
public void onBackPressed() {
Intent intent = new Intent(getApplicationContext(), StartActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("EXIT", true);
startActivity(intent);
}
和StartActivity的onCreate()
:
if (getIntent().getBooleanExtra("EXIT", false)) {
finish();
}
else {
Intent StartApp = new Intent(this, TestActivity.class);
startActivity(StartApp);
}
<强>截图强>!
<强>正常强>
点击了EditText框
向下滚动(ps:我把文本框放在scrollview里面就是为什么它消失了;))
我希望这能帮到你;)
答案 2 :(得分:6)
嘿,你可以尝试添加这个
android:isScrollContainer="false"
ScrollView 中的。它曾经解决了我的问题。也可以帮助你。
另外,将其添加到manifest.xml中的活动
android:windowSoftInputMode="adjustPan"
希望它有所帮助.. !! :)
答案 3 :(得分:4)
我遇到了同样的问题。
在onCreate方法中添加外部布局背景,如下所示
getWindow().setBackgroundDrawableResource(R.drawable.login_bg);
并将外部布局添加为
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
>
<ScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#4d000000"
><other code></ScrollView></RelativeLayout>
为外部布局添加android:layout_weight="1"
,不在xml文件中设置背景
我认为这有助于某人
答案 4 :(得分:3)
您应该将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
值来达到预期效果。如果您希望从顶部而不是默认的中间裁剪裁剪图像,请参阅here了解如何实现此目的,或尝试使用this库
答案 5 :(得分:1)
检查this answer,基本诀窍是你不要设置布局的背景,而是设置窗口。这可以通过getWindow().setBackgroundDrawable()
的活动完成,也可以在活动主题中设置。
答案 6 :(得分:0)
而不是android:windowSoftInputMode="stateVisible|adjustPan"
,您应该更改为android:windowSoftInputMode="stateVisible|adjustResize"
。它对我有用。
答案 7 :(得分:0)
使用ScrollView作为顶级父级。 当您打开和关闭键盘时,它会自动上下滚动。
答案 8 :(得分: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>
答案 9 :(得分:-1)
您应该在adjustResize
文件的windowSoftInputMode
上使用Activity
设置使用AndroidManifest.xml
选项。
答案 10 :(得分:-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" >