Android:弹出键盘上的背景图片大小调整

时间:2015-04-13 05:06:31

标签: android android-layout android-scrollview android-background

我正在开发一个应用程序,其中背景图像在键盘弹出窗口中缩小。我的.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的背景图像缩小。我需要在键盘弹出窗口向上移动页脚和背景。

我错过了什么或做错了请建议我。

11 个答案:

答案 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);
}

<强>截图

<强>正常 Normal

点击了EditText框 Clicked textbox

向下滚动(ps:我把文本框放在scrollview里面就是为什么它消失了;)) after scrolled down

我希望这能帮到你;)

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