我一直在寻找这个问题的解决方案,但是还没有找到解决方案。我正在开发一个小部件应用程序,应该在驾驶汽车时在Android智能手机上使用。基本小部件(家庭和锁屏)已经完成,现在我想调整布局,以便它也可以在横向模式下使用。
我不确定这是否正确,但是当查看来自我的设备(HTC One)的消息时,当我在锁屏/主屏幕中更改方向时,没有消息指示方向更改。因此,无法确定当前使用的方向,小部件将始终以横向模式显示。我认为这是因为它是Android手机版本,因为我的华硕Nexus 7的锁屏和主屏幕的方向发生了变化。
这让我的生活更轻松,更难:
更容易,因为当方向改变时,我不必为旋转实现动画。我可以实现我的小部件的三个版本,每个版本对应一个方向(横向,纵向,反向横向),用户可以在创建小部件时选择。
更难,因为我需要找到一种方法来向左和向右旋转我的按钮。由于Android小部件只提供一组有限的布局,例如不允许自定义Button类,这比我想象的要难。
这是我的肖像版本:
当我对设计进行前几次调整时,这就是它的样子,当设备逆时针旋转90°时可以使用它:
正如您所看到的,我尝试旋转底部部分,以便在视觉上吸引用户。旋转语音按钮没有问题,但是这里出现了我被卡住的部分:
我想在语音按钮顶部放置四个静态按钮。它们在水平方向LinearLayout
范围内。由于我想让按钮尽可能大,以便用户在驾驶时可以舒适地使用小部件,因此按钮的所有宽度和高度都设置为match_parent
。这样,按钮占用尽可能多的空间。
现在,我显然必须旋转文本,以便用户可以在手机转为横向模式时阅读。但是当自己旋转按钮时,结果是:
如您所见,高度和宽度组件与之前相同,按钮只旋转了90度。
要解决这个问题,我必须交换宽度和高度的值。由于RemoteViews
对象的方法收集受限,目前无法实现。
解决整个问题的另一种方法是仅旋转文本。由于RemoteViews
对象的功能受限,这在窗口小部件中也是不可能的。
实现此布局的另一种方法是将LinearLayout
的方向更改为水平方向。然后将布局本身旋转90度。这就是它的样子。更好,但由于高度分量基于非旋转的LinearLayout,因此按钮不会填充LinearLayout的整个宽度,而且比LinearLayout的宽度更宽。
因此,实现此目的的唯一方法是在xml文件中静态旋转文本。在我的配置活动中手动执行它只会旋转一次,当正在执行小部件的下一次更新时,将恢复xml定义的布局(如果错误,请纠正我!)。
我还没有找到改变按钮内文字方向的方法,android:textAlignment
和android:textDirection
都做了不同的事情并没有帮助我。
请大家,让我知道如果我错过了什么或者你有什么想法......我已经在互联网上搜索了几个小时,但找不到解决这个问题的方法。
PS:该解决方案也应该可用于ImageButton,它在我的设计中看起来是正确的,但仅仅是因为按钮的巧合几乎是方形的形式。