Android 从充气布局充气ListView/ExpandableListView
让它更简单一点,让我们假设我有一个服务,它使用LayoutFlater从布局中为按钮充气。充气按钮显示在所有其他应用程序的上方(使用系统警报窗口权限),如下所示: 从主活动启动服务的代码: 活动\u main.xmlAndroid 从充气布局充气ListView/ExpandableListView,android,android-layout,listview,android-fragments,expandablelistview,Android,Android Layout,Listview,Android Fragments,Expandablelistview,让它更简单一点,让我们假设我有一个服务,它使用LayoutFlater从布局中为按钮充气。充气按钮显示在所有其他应用程序的上方(使用系统警报窗口权限),如下所示: 从主活动启动服务的代码: 活动\u main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Start Overlay"
android:id="@+id/btn_start"
android:layout_gravity="center_horizontal" />
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Click"
android:id="@+id/button_click"
android:textColor="#ffffff" />
</LinearLayout>
服务代码:
ButtonOverlay.java
public class MainActivity extends AppCompatActivity {
private Button btn_start;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn_start = (Button) findViewById(R.id.btn_start);
btn_start.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view) {
startService(new Intent(MainActivity.this, ButtonOverlay.class));
}
});
}
}
public class ButtonOverlay extends Service{
private WindowManager wm;
private LinearLayout ll;
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
wm = (WindowManager) getSystemService(WINDOW_SERVICE);
ll = new LinearLayout(this);
LinearLayout.LayoutParams llParameters = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT);
ll.setBackgroundColor(Color.argb(50, 255, 255, 255));
ll.setLayoutParams(llParameters);
final WindowManager.LayoutParams parameters = new WindowManager.LayoutParams(WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.TYPE_PHONE, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, PixelFormat.TRANSLUCENT);
parameters.x = 0;
parameters.y = 0;
parameters.gravity = Gravity.LEFT | Gravity.TOP;
LayoutInflater li = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
ll = (LinearLayout) li.inflate(R.layout.activity_button, null);
Button btn = (Button) ll.findViewById(R.id.btn_click);
wm.addView(ll, parameters);
}
}
包含充气按钮的布局:
活动按钮.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Start Overlay"
android:id="@+id/btn_start"
android:layout_gravity="center_horizontal" />
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Click"
android:id="@+id/button_click"
android:textColor="#ffffff" />
</LinearLayout>
现在我要做的是为按钮btn\u click
设置一个onClickListener,这样当您点击它时,另一个具有listView或更好的expandableListView的布局就会膨胀。
以下是我需要的纯文本视图:
但是我不知道如何使用列表视图或可扩展列表视图,因为它们更复杂。我这样做是否正确?
我应该如何构造代码,使其保持干净,使用多个重叠的按钮,这些按钮可以膨胀不同的布局(例如,
button1
显示如上图所示的纯文本,button2
显示列表视图,button3
显示图像视图)
编辑1:
我看过一个expandableListView
,把它作为一个独立的项目来使用是没有问题的。我试图将这个确切的示例夸大为浮动窗口jst,如plainTextView
,但我不知道应该将代码放在onCreate
方法中的何处。有什么想法吗