我需要类似DialogFragment
但有完整课程的东西,换句话说,创建一个activity
浮点数。程序如下:
当我单击我MainActivity
的一个项目ListView
并显示一个上下文菜单时,我选择更多信息并且我的类打开MasInformacion
加载我Sqlite
的那个项目的数据,好吧,我已经设法MasInformacion
让它浮动(也许它不是最好的选择,如果有更好的可以告诉我)并且透明,以便它显示在我的后面MainActivity
,如下所示:
好吧,我希望它是这样的:
不完全透明,但有不透明性以掩盖其背后的“阶级”。
MasInformacion
: 这就是我让它“浮动”的方式
DisplayMetrics flotante = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(flotante);
int width = flotante.widthPixels;
int height = flotante.heightPixels;
getWindow().setLayout((int)(width*.9),(int)(height*.7));
...
// Recupero los datos de la DB
extras = getIntent().getExtras();
if (estadoEditarPersona()) {
editTextNombre.setText(extras.getString("nombre"));
editTextFecha.setText(extras.getString("fecha"));
editTextZodiaco.setText(extras.getString("zodiaco"));
editTextEdad.setText(extras.getString("edad"));
editTextDiasrestantes.setText(extras.getString("diasrestantes"));
ruta_imagen = extras.getString("ruta_imagen");
imagenPersona.setImageBitmap(crearThumb());
}
}
MainActivity
// menu contextual
@Override
public boolean onContextItemSelected(android.view.MenuItem item) {
AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
switch (item.getItemId()) {
case R.id.menu_contextual_mas_informacion:
masInformacion((int)info.id);
return true;
default:
return super.onContextItemSelected((android.view.MenuItem) item);
}
}
...
// metodo masInformacion
public void masInformacion(int p_id){
Persona persona;
try{
persona = baseDatos.getPersona(p_id);
// Se dirige a la actividad MasInformacion
Intent actividad_editarPersona = new Intent(this, MasInformacion.class);
// Carga los datos para mostrar en MasInformacion
actividad_editarPersona.putExtra("id", p_id);
actividad_editarPersona.putExtra("nombre", persona.getNombre());
actividad_editarPersona.putExtra("fecha", persona.getFecha());
actividad_editarPersona.putExtra("zodiaco", persona.getZodiaco());
actividad_editarPersona.putExtra("edad", persona.getEdad());
actividad_editarPersona.putExtra("diasrestantes", persona.getDiasrestantes());
actividad_editarPersona.putExtra("ruta_imagen", persona.getRutaImagen());
startActivityForResult(actividad_editarPersona, CODIGO_RESULT_EDITAR_PERSONA);
}catch (Exception e){
Toast.makeText(getApplicationContext(), (getResources().getString(R.string.error_mostrarinformacion)), Toast.LENGTH_SHORT).show();
e.printStackTrace();
}finally{
baseDatos.cerrar();
}
}
style.xml
我从加载AndroidManifest
它android:theme="@style/AppTheme.Flotante"/>
<style name="AppTheme.Flotante">
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowCloseOnTouchOutside">true</item>
<item name="android:windowBackground">@drawable/borde_flotante</item>
</style>
<!-- probe así pero lo transparente se vuelve completamente negro, cuando "colorPrimary" no es negro-->
<style name="AppTheme.Flotante">
<item name="android:windowBackground">@color/colorPrimary</item>
</style>
您可以在此处查看文档: https ://developer.android.com/reference/android/app/DialogFragment.html
在您的项目的 onClick() 内部调用此方法:
来自谷歌文档:
这里是自定义 DialogFragment:
这样,您将在具有默认透明度的背景的浮动窗口中显示布局的内容(在本例中为 custom_layout.xml)。
如果您想向该片段发送信息,请按以下方式进行。
来自谷歌文档:
我已经测试了代码,它可以正常工作并且可以满足您的要求。
如果要将 Activity 转换为 DialogFragment,请使用相同的布局,将 Activity 的 onCreate 的内容传递给 Fragment 的 onCreateView 并复制所有方法和变量。
作为一个例子,如果你想要一个“透明”的背景颜色,包含一个,定义它
colors.xml
:你从定义的样式中调用它:
请记住,您可以定义另一种类型的不透明度,例如绿色:
对于这种颜色,您可以定义不透明度或不透明度:
或完全不透明: