tamaño - personalizar teclado android
Android: cambio de tamaño de la imagen de fondo en el teclado emergente (12)
¿Por qué no te gusta esto?
<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>
Estoy desarrollando una aplicación en la que la imagen de fondo se reduce en el teclado emergente. Mi .xml es el siguiente:
<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>
Busqué en Google y encontré que, para agregar
android:windowSoftInputMode="stateVisible|adjustPan"
en mi archivo manifiesto Pero no sirve de nada.
Editar:
Mi diseño antes de que aparezca el panel de teclas aparece como:
Y después aparece como
Por favor, compruebe la diferencia en la imagen de fondo. En la imagen 1, la imagen está en tamaño y en la imagen 2 la imagen de fondo está reducida. Necesito que el pie de página y el fondo se desplacen hacia arriba en la ventana emergente del teclado.
Lo que me falta o estoy haciendo mal, por favor sugiéreme
Debe usar la opción adjustResize
para la configuración windowSoftInputMode
en la Activity
en su archivo AndroidManifest.xml
.
Debes mover el android:background="@drawable/background"
en un ImageView
arriba de ScrollView
. Cuando el teclado se abre, efectivamente hace que la pantalla sea más pequeña, y al tener una imagen como fondo, no tiene control sobre cómo cambiar el tamaño / recorte. Por lo tanto, asumiendo que desea tener el ancho completo de la imagen pero mantener la relación de avance, pruebe esto
<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>
Puede probar diferentes valores de android:scaleType
para lograr el efecto deseado. Si desea que la imagen se recorte desde la parte superior en lugar del recorte medio predeterminado, consulte here cómo conseguirlo o intente usar this biblioteca
En lugar de android:windowSoftInputMode="stateVisible|adjustPan"
, debe cambiar a android:windowSoftInputMode="stateVisible|adjustResize"
. Funcionó para mí.
Estoy usando la jerarquía de vista inferior y está funcionando bien para mí:
<?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" >
Hey, ¿puedes por favor intentar agregar esto?
android:isScrollContainer="false"
en su ScrollView . Ha resuelto mi problema una vez. Te podría ayudar a ti también.
Además, agregue esto a su actividad en manifest.xml
android:windowSoftInputMode="adjustPan"
Espero eso ayude..!! :)
Ok, si tengo la pregunta correcta, desea un diseño con un fondo y una vista de desplazamiento. Y cuando aparece el teclado de software, desea cambiar el tamaño de la vista de desplazamiento, pero mantener el fondo a tamaño completo, ¿no? Si eso es lo que quiere, entonces puedo haber encontrado una solución para este problema:
Lo que puedes hacer es hacer 2 actividades.
Actividad 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
}
}
Actividad2:
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);
}
}
comenzar el diseño:
<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>
diseño de diálogo:
<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
Actividad de inicio:
android:theme="@android:style/Theme.NoTitleBar.Fullscreen">
Actividad de diálogo
android:theme="@android:style/Theme.Dialog"
android:windowSoftInputMode="adjustResize"
android:excludeFromRecents="true"
Editar: para finalizar las Actividades, use lo siguiente en algún lugar dentro de su DialogActivity (ejemplo: anular el botón de retroceso ):
@Override
public void onBackPressed() {
Intent intent = new Intent(getApplicationContext(), StartActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("EXIT", true);
startActivity(intent);
}
y en onCreate()
de StartActivity:
if (getIntent().getBooleanExtra("EXIT", false)) {
finish();
}
else {
Intent StartApp = new Intent(this, TestActivity.class);
startActivity(StartApp);
}
Capturas de pantalla !
Normal
Haga clic en el cuadro EditarTexto
Después de Desplácese hacia abajo (ps: pongo el cuadro de texto dentro de scrollview por eso se ha ido))
Espero que esto te ayude;)
Solo usa en tu onCreate()
este código:
protected void onCreate(Bundle savedInstanceState) {
...
getWindow().setBackgroundDrawableResource(R.drawable.your_image_resource);
...
}
y elimina esta línea en tu xml:
android:background="@drawable/background"
Lee mas en:
http://developer.android.com/reference/android/view/Window.html
Tuve el mismo problema.
Agregue su fondo de diseño externo dentro del método onCreate como se muestra a continuación
getWindow().setBackgroundDrawableResource(R.drawable.login_bg);
y añadir su diseño exterior como
<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>
Agregue android:layout_weight="1"
para el diseño externo y no configure el fondo en un archivo xml. Creo que esto ayuda a alguien
Una vez me enfrenté al problema similar, la mía se resolvió mediante el uso de las siguientes propiedades en el manifiesto, utilícela donde se declara su actividad.
android:windowSoftInputMode="stateHidden|adjustResize|adjustPan"
Utilice ScrollView como principal padre. Se desplazará hacia arriba y hacia abajo automáticamente cuando abra y cierre el teclado.
Verifique esta respuesta , el truco básico es que no establece el fondo para el diseño sino para la ventana. Esto se puede hacer desde la actividad con getWindow().setBackgroundDrawable()
, o puede configurarlo en un tema para su actividad.