标签: android-widget

Android.widget,textView无法强制转换为android.widget,按钮

启动我的活动时,我一直收到运行时错误,并说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)

android android-widget android-intent android-layout

26
推荐指数
2
解决办法
8万
查看次数

什么时候需要在Android小部件或应用程序中使用singleTop launchMode?

我刚被一个小部件烧毁了.我可以看到问题的原因,但我无法确定原因或解决方案.我的小部件发出了一个搜索(SearchManager),活动启动了一个搜索对话框,但当它回调到我的小部件时,它创建了另一个对小部件的引用(即,thread-id是相同的,但是widget-id从65变为0).

这让我相信创建了一个新实例,并在文档中搜索了适用于该问题的设置.最终,我偶然发现了,android:launchMode="singleTop"并且只要我在AndroidManifest中设置它,中提琴!我的小部件工作.

这花了我两天的调试时间.

还有其他任何情况或者我的问题是否有更技术上更正确的答案?

android android-widget android-searchmanager

25
推荐指数
1
解决办法
3万
查看次数

将BroadcastReceiver注册到Widget(Context对象的区别)

有点混淆Widget ContextApplication 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 android-widget

25
推荐指数
1
解决办法
9949
查看次数

可以在TextView文本中加下划线

在android中是否有可能使用带有基本标签的setText(text)函数在Java代码中为TextView提供一些文本 标记下划线的单词?

android android-widget

25
推荐指数
3
解决办法
5万
查看次数

启动配置活动时调用Widget onUpdate

我正在实现一个小部件,我面临以下问题:

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

25
推荐指数
1
解决办法
2852
查看次数

如何根据内容动态缩小WebView大小?

这个问题可以理解问题的详细解释,因为用户添加了图像以更好地解释它.

我在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中一个众所周知的问题.这个问题也表明了类似的问题.

performance android webview android-widget android-layout

25
推荐指数
1
解决办法
3万
查看次数

stopPlayback()之后的Android VideoView清除显示

我正在使用VideoView组件播放视频.手动调用stopPlayback()后,我似乎无法清除VideoView显示.我想重置VideoView,以便可以看到原始背景.

  1. 在VideoView组件中播放视频.
  2. 选择要播放的新视频.
  3. VideoView卡在第一个视频的最后一帧,直到下一个视频开始.如果下一个视频出现错误,则第一个视频中的静态图像仍然卡在那里.
  4. 如果我让视频播放到完成状态,则清除显示.

我正在使用的代码:

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 android-widget

25
推荐指数
2
解决办法
2万
查看次数

为Android 4.0或更高版本创建自定义锁屏?

我想为Android 4.0及更高版本创建自定义lockScreen,我已经尝试了创建锁屏的小部件,但它只支持android 4.2.

有没有其他方法来创建自定义android锁屏?

android android-widget lockscreen android-4.2-jelly-bean

25
推荐指数
1
解决办法
5万
查看次数

是否有可能只为某个Android版本显示小部件?

是否可以在"添加到主屏幕>小部件"对话框中显示小部件仅适用于某个Android版本而无需上传两个APK并分配到正确的SDK版本号?

android android-widget android-version apk

24
推荐指数
2
解决办法
1772
查看次数

重置搜索窗口小部件(SearchView)值

我有2个活动:第一个,HomepageActiviy有一个搜索小部件,使用另一个活动搜索数据,SearchActivity.

我想要做的是当我回到SearchActiviyHomepageActivity,搜索小部件折叠并带有空文本.

我试图做以下事情:

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)

如果窗口小部件显示为已折叠,则窗口小部件中的文本仍会记住搜索到的文本(在重新打开窗口小部件后).如何重置小部件的文本?

谢谢你的帮助!;)

android android-widget

24
推荐指数
4
解决办法
3万
查看次数