启动我的活动时,我一直收到运行时错误,并说android.widget.textview无法转换为android.widget.button?
XML:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:tools="http://schemas.android.com/tools"
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/RelativeLayout1"
android:layout_width="fill_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:ignore="HardcodedText" >
<TextView
android:id="@+id/textViewName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="false"
android:layout_alignParentTop="false"
android:text="Name:"
android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
android:id="@+id/textViewLevel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_below="@+id/textViewName"
android:text="Level:"
android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
android:id="@+id/textViewClass"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="false"
android:layout_below="@+id/textViewLevel"
android:text="Class:"
android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
android:id="@+id/textViewTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/textViewClass"
android:layout_alignBottom="@+id/textViewClass"
android:layout_centerHorizontal="true"
android:text="Title:"
android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
android:id="@+id/textViewXP"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/textViewTitle"
android:layout_alignLeft="@+id/textViewTitle"
android:text="XP:"
android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
android:id="@+id/textViewGold"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textViewXP"
android:layout_alignParentTop="true"
android:text="Gold:"
android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
android:id="@+id/textViewLineBreak"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/textViewClass"
android:text="________________________________________"
android:textAppearance="?android:attr/textAppearanceMedium"
android:visibility="invisible" /> …Run Code Online (Sandbox Code Playgroud) 我刚被一个小部件烧毁了.我可以看到问题的原因,但我无法确定原因或解决方案.我的小部件发出了一个搜索(SearchManager),活动启动了一个搜索对话框,但当它回调到我的小部件时,它创建了另一个对小部件的引用(即,thread-id是相同的,但是widget-id从65变为0).
这让我相信创建了一个新实例,并在文档中搜索了适用于该问题的设置.最终,我偶然发现了,android:launchMode="singleTop"并且只要我在AndroidManifest中设置它,中提琴!我的小部件工作.
这花了我两天的调试时间.
还有其他任何情况或者我的问题是否有更技术上更正确的答案?
有点混淆Widget Context和Application Context之间的区别:关于无法通过实现Android Widget的源代码注册新的BroadcastReceiver的问题(Ref.1)
出于可读性的原因,我将我的答案复制如下:★ 亨利的问题(参考文献1):
我正在制作一个需要广播接收器的小部件,就像com.example.android.apis.appwidget.ExampleBroadcastReceiver中的那个.但是,该示例在清单中定义了Intent.ACTION_TIMEZONE_CHANGED,但有一些不允许这样做
例如,Intent.ACTION_TIME_TICK说"你不能通过在清单中声明的组件来接收它,只能通过用Context.registerReceiver()明确地注册它."
所以我删除了清单声明并尝试使用如下调用替换示例中的AppWidgetProvider.onEnabled函数:context.registerReceiver(myReceiver,new IntentFilter(Intent.ACTION_TIME_TICK));
(其中"myReceiver"是我想要的接收器的实例.)但是,当我尝试运行代码时,我收到以下错误:
无法启动接收器... android.content.ReceiverCallNotAllowedException:不允许IntentReceiver组件注册接收意图
★我们分析了这个问题并解决了这个问题(参考文献1)
这是调查此问题后的结果,我是处理程序成功此问题.所以我收集报告与android开发者分享.希望它有所帮助
结果如下:
❶ISSUE:*关于Widget的限制,当尝试通过显式源代码注册BroadcastReceiver时:(通过Manifest.xml注册BroadcastReceiver时无效)
❷示例:*BroadcastReceiver:ACTION_TIME_TICK消息就是一个例子:来自Android的文档指出:"你不能通过清单中声明的组件来接收它,只能通过用Context.registerReceiver()明确地注册它." (参考文献1)
❸PREVIOUSSOLUTION:*Code Snippet:context.registerReceiver(this,intentName); (1)
❹ERROR使用3★解决方案*当实现跟随(1)时,它虽然异常:android.content.ReceiverCallNotAllowedException:IntentReceiver组件不允许注册接收意图
★任何需要在Widget中注册BroadcastReceiver的人都有好消息:)我们可以注册成功的BroadcastReceiver
❺您的解决方案:*但是,我们可以通过使用的应用程序上下文而不是Widget上下文(*)代码片段来修复它:context.getApplicationContext.registerReceiver(this,intentName);
❻参考:*http://developer.android.com/reference/android/content/Intent.html#AC ...关于
❼目标环境:*SDK 2.3,在模拟器和NexusOne 2.3上,如果有任何成功的解决方案请更新我们的报告
❽注意*可能是小部件和应用程序的Context对象之间的区别,但我仍然不知道这个问题的确切原因.
如果您有更好的解决方案或更清楚地解释,请告诉我
我也解决了这个问题,但我仍然不知道这个问题的确切原因.
如果您有更好的解决方案或更清楚地解释,请告诉我
★结论:
● NG:使用Widget上下文注册BroadcastReceiver时
context.registerReceiver(this, intentName);
Run Code Online (Sandbox Code Playgroud)
- >它以为异常:
Unable to start receiver...android.content.ReceiverCallNotAllowedException: IntentReceiver components are not allowed to register to receive intents
Run Code Online (Sandbox Code Playgroud)
● OK:使用Application上下文时一切正常:
ontext.getApplicationContext.registerReceiver(this, intentName);
Run Code Online (Sandbox Code Playgroud)
★问: 还有我们的解决方案可以求解的问题:"无法注册新的广播消息通过实现Android小工具的源代码".
但我仍然关注两个问题:
问题 ❶:Widget …
在android中是否有可能使用带有基本标签的setText(text)函数在Java代码中为TextView提供一些文本 标记下划线的单词?
我正在实现一个小部件,我面临以下问题:
1) onUpdate当我将小部件添加到主屏幕时调用,即使我指定了配置活动.一旦我将它添加到主屏幕,APPWIDGET_ENABLED就会发送广播,然后发送,APPWIDGET_UPDATE然后启动配置活动..这是一个错误吗?onUpdate在配置活动返回之前,我应该如何理解被调用的方法?我可以通过共享偏好值来实现,但我希望它的行为与开发人员指南中的内容相同,即onUpdate不应该调用该方法.
2) onUpdate每秒都没有被调用updatePeriodMillis,这已被设置为10000,即10用于测试目的的秒数.我receiver在Manifest文件中的声明中是否遗漏了什么?我一直收到Lint警告导出的接收器不需要许可,但我认为这是一个Lint问题而不是我的错.
编辑:我刚刚在参考文档中找到了这个:注意:updatePeriodMillis请求的更新不会每30分钟发送一次.因此,我不会更新窗口小部件的频率是正确的,我将时间更改为1800000毫秒.
3)我想将自己的广播操作传递给窗口小部件提供程序,receiver在Manifest中添加另一个阻止相同提供程序类的块是正确的还是我应该在intent-filter包含该APPWIDGET_UPDATE 操作的内容中添加另一个意图操作?顺便说一下,我评论了我的第二个receiver区块,这不是上述问题的原因.我创建了另一个receiver 块,因为我想将其声明为未导出,以便intent-filter 仅通过我的应用程序代码而不是其他任何人触发操作.
AndroidManifest.xml中
<receiver android:name="MyWidgetProvider"
android:exported="true">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/my_widget_info" />
</receiver>
<receiver android:name="MyWidgetProvider"
android:exported="false">
<intent-filter>
<action android:name="org.test.mywidget.FORCE_SMALL_WIDGET_UPDATE" />
</intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)
my_widget_info.xml
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:minWidth="294dp"
android:minHeight="110dp"
android:updatePeriodMillis="1800000"
android:initialLayout="@layout/my_widget_layout"
android:configure="org.test.mywidget.MyWidgetConfiguration"
android:resizeMode="none">
</appwidget-provider>
Run Code Online (Sandbox Code Playgroud) android broadcastreceiver android-widget android-manifest android-appwidget
从这个问题可以理解问题的详细解释,因为用户添加了图像以更好地解释它.
我在WebView中加载Html内容.我的布局有很多视图,WebView位于ScrollView中(根据布局要求).请不要回答 - "Don't put WebView inside ScrollView".我知道将WebView放入ScrollView并不是一件好事,但根据要求我需要这样做.
所以,我有左片段(显示列表项)和右片段(显示从左片段中选择列表项反映的数据).现在,首先当我在WebV中加载Html内容时,它显示正确.之后,当我使用新的Html内容刷新WebView时,会出现问题.
假设,我的第一个Html内容是正确显示的100行,然后我用新的Html内容重新加载WebView,这是40行然后WebView没有缩小并适合40行的内容,它仍然长达100在底部显示白色/空白区域的线条.
因此,似乎WebView能够从较少的内容重新调整自身大小,这些内容先前已加载到更多内容,但在内容少于先前加载的内容时无法重新调整大小.
我尝试了很多方法,
android:hardwareAccelerated="true"清单mWebView.clearView();哪个导致重新调整WebView的大小,但有时WebView开始闪烁,这只是令人讨厌.与此视频类似但是,找不到任何合适的解决方案.如果你们中的任何人遇到同样的问题,请让我知道我可以申请的最佳解决方案.
更新 -
经过进一步的谷歌搜索,似乎这是Honeycomb中一个众所周知的问题.这个问题也表明了类似的问题.
我正在使用VideoView组件播放视频.手动调用stopPlayback()后,我似乎无法清除VideoView显示.我想重置VideoView,以便可以看到原始背景.
我正在使用的代码:
private VideoView videoViewer = null;
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
...
if (videoViewer != null) {
videoViewer.setOnPreparedListener(new OnPreparedListener());
}
...
}
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if (videoViewer != null) {
videoViewer.stopPlayback();
videoViewer.setVideoURI(Uri.parse("http://my_vido_url/playlist.m3u8"));
}
}
private class OnPreparedListener implements MediaPlayer.OnPreparedListener {
@Override
public void onPrepared(MediaPlayer mp) {
videoViewer.start();
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,基于VideoView.java源,stopPlayback()在底层MediaPlayer上执行以下操作:
public void stopPlayback() {
if (mMediaPlayer != null) {
mMediaPlayer.stop();
mMediaPlayer.release();
mMediaPlayer = …Run Code Online (Sandbox Code Playgroud) 我想为Android 4.0及更高版本创建自定义lockScreen,我已经尝试了创建锁屏的小部件,但它只支持android 4.2.
有没有其他方法来创建自定义android锁屏?
是否可以在"添加到主屏幕>小部件"对话框中显示小部件仅适用于某个Android版本而无需上传两个APK并分配到正确的SDK版本号?
我有2个活动:第一个,HomepageActiviy有一个搜索小部件,使用另一个活动搜索数据,SearchActivity.
我想要做的是当我回到SearchActiviy时HomepageActivity,搜索小部件折叠并带有空文本.
我试图做以下事情:
public class HomepageActivity extends Activity {
@TargetApi(11)
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.projectslist, menu);
if(Build.VERSION.SDK_INT >= 11) {
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
SearchView searchView = (SearchView) menu.findItem(R.id.homepage_search).getActionView();
ComponentName component = new ComponentName(this, SearchActivity.class);
searchView.setSearchableInfo(searchManager.getSearchableInfo(component));
searchView.setIconifiedByDefault(true);
searchView.setQuery("", false);
}
return super.onCreateOptionsMenu(menu);
}
[…]
@TargetApi(11)
@Override
protected void onRestart() {
super.onRestart();
if(Build.VERSION.SDK_INT >= 11)
invalidateOptionsMenu();
launchAsynchronousImageDownload();
}
}
Run Code Online (Sandbox Code Playgroud)
如果窗口小部件显示为已折叠,则窗口小部件中的文本仍会记住搜索到的文本(在重新打开窗口小部件后).如何重置小部件的文本?
谢谢你的帮助!;)