我是一个新的Stackoverflow注册用户,但已经使用了很长时间了。指出要点:我正在创建一个Android Launcher,并想实现AppWidgets。对于测试,我使用com.android.quicksearchbox
小部件并将其添加到屏幕顶部。问题是,我正在使用AppWidgetHostView,似乎没有注意到用户使用的任何单击或触摸事件。有人可以告诉我为什么吗?这是我的AppWidgets的所有代码(在onCreate(Bundle)
函数中):
android.appwidget.AppWidgetManager appWidgetManager = android.appwidget.AppWidgetManager.getInstance(this);
android.appwidget.AppWidgetHost appWidgetHost = new android.appwidget.AppWidgetHost(this, 0);
android.appwidget.AppWidgetProviderInfo newAppWidgetProviderInfo = new android.appwidget.AppWidgetProviderInfo();
int appWidgetId = appWidgetHost.allocateAppWidgetId();
List<android.appwidget.AppWidgetProviderInfo> appWidgetInfos = new ArrayList<android.appwidget.AppWidgetProviderInfo>();
appWidgetInfos = appWidgetManager.getInstalledProviders();
for(int j = 0; j < appWidgetInfos.size(); j++)
{
if (appWidgetInfos.get(j).provider.getPackageName().equals("com.android.quicksearchbox"))
{
newAppWidgetProviderInfo = appWidgetInfos.get(j);
break;
}
}
android.appwidget.AppWidgetHostView hostView = appWidgetHost.createView(this, appWidgetId, newAppWidgetProviderInfo);
hostView.setAppWidget(appWidgetId, newAppWidgetProviderInfo);
android.widget.LinearLayout ll = (android.widget.LinearLayout) findViewById(R.id.loll);
ll.addView(hostView, 0);
loll是我的线层。
所以有人知道如何启用事件?或者,如果还有另一种将App-Widgets添加到我的启动器的方法?
谢谢。
使用framelayout,然后添加一个简单的视图作为重叠以处理单击事件
布局:
<layout>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:id="@+id/container"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:gravity="center">
<View
android:id="@+id/overlap"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clickable="true"
android:focusable="true" />
</FrameLayout>
</layout>
代码:
// make sure AppWidgetHostView in bottom layer
AppWidgetHostView.z = -1f
binding.container.addView(AppWidgetHostView, width,height)
binding.overlap.tag = item
binding.overlap.setOnClickListener {
val widget = it.tag as Widget
val intent = Intent(context, widget.getConfigActivity())
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, widget.id.toInt())
context.startActivity(intent)
}