我目前正在开发专门用于Android的GoogleTV设备的应用程序,其中使用或强制应用程序的方向除了横向之外的任何其他任何东西都没有启用,并且将来不会启用我想象的,实际上应用程序只是崩溃了试图跑setRequestedOrientation();
Videoviews继承了普通视图的位置属性,Stuff like SetX,SetY即SetRotation.
您可以将视频视图的旋转设置为90度,但实际的视频缓冲不会旋转.我已经尝试了从使用旧媒体播放器> surfaceview.getHolder().lockcanvas().rotate(degrees)以各种可想象的方式,到覆盖onDraw扩展普通类的自定义视频视图的方法,其中没有一个我可以成功地工作.
简而言之,如何在视频内旋转ACTUAL视频,而无需更改设备的方向?如果您有一个旋转的视频视图的工作示例,其内容也已旋转,请解释您是如何工作的.
提前致谢.
我想请你注意我们正在为Android 3.1开发,并且到目前为止所有的一切都是动态编码的,所有的imageview和videoview都是通过代码创建的,只有我们用于Z索引项的特定布局已在该layout.xml文件.
有人可以向我解释或者可能指出一个链接或一个例子,说明当涉及片段时应该如何处理屏幕方向.我现在遇到的问题是我有一个带有三个标签的操作栏的应用程序.每个选项卡包含一个片段.因此,当我翻转设备时,只使用我设置的一个片段
actionbar.setSelectedNavigationItem(1)
Run Code Online (Sandbox Code Playgroud)
显示(没有混淆,其他选项卡是可见的,但当我点击它们没有任何反应时,它们无法选择和显示.它们的内容永远不会显示).在这些情况下是否有某些事情要做?有人可以给我一个建议,我会很感激.感谢你.
我想写一些有趣的代码在Windows 7上翻转方向.请参阅我想要控制的选项的屏幕截图.

这是我的代码:
class Program
{
public const long WM_PAINT=0x0F;
public const long WM_DISPLAYCHANGE=0x7E;
[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Auto)]
public struct DEVMODE // taken from Win API
{
...
public System.Windows.Forms.ScreenOrientation dmDisplayOrientation;
}
[DllImport("user32.dll", CharSet=CharSet.Auto)]
public static extern bool EnumDisplaySettings(string lpszDeviceName, int iModeNum, ref DEVMODE lpDevMode);
[DllImport("user32.dll", CharSet=CharSet.Ansi)]
public static extern int ChangeDisplaySettings(ref DEVMODE lpDevMode, int dwFlags);
[DllImport("User32.Dll")]
public static extern long PostMessage(IntPtr hWnd, long wMsg, long wParam, long lParam);
static void Main(string[] args)
{
ScreenOrientation ori=ScreenOrientation.Angle0;
DEVMODE mode=new DEVMODE()
{
dmSize=(short)Marshal.SizeOf(typeof(DEVMODE)),
dmDriverExtra=0, …Run Code Online (Sandbox Code Playgroud) 当方向发生变化时,我在某些设备尺寸上切换活动和片段时遇到问题.在我的情况下它是large屏幕,但它可能会发生在其他屏幕尺寸,具体取决于应用程序.我四处寻找答案,但似乎没有什么能正确解决这个问题.
我有两个活动,MainActivity和SubordinateActivity.MainActivity是应用程序的唯一入口点; MainActivity启动SubordinateActivity.每个活动都有自己的片段,MainFragment和SubordinateFragment.在normal设备上运行时,无论方向如何,屏幕上一次只有一个片段有足够的空间.在这种情况下,每个活动都将管理自己的片段.在xlarge设备上,无论方向如何,都有足够的空间容纳两个碎片.在这种情况下,有不同的布局文件允许屏幕上有两个片段.MainFragment和SubordinateFragment都由MainActivity管理(从不使用SubordinateActivity).
large屏幕出现问题.使用横向方向,有足够的空间容纳两个碎片,但纵向方向则没有.我有适当的布局文件.在横向模式下,MainActivity管理两个片段(与xlarge设备一样),在纵向模式下,每个活动管理自己的片段(与normal设备一样).这会在两种情况下产生问题:
这个问题的一个很好的例子是GMail应用程序.以下是该应用程序的一些屏幕截图,以防不清楚我在说什么.我意识到GMail应用程序的UI实际上比我的更复杂,但问题是一样的.


我确信这是其他人遇到的问题,因为GMail开发人员也遇到过这个问题.我无法弄清楚一个好的解决方案是什么,因为每种可能性似乎都涉及违反Android UI最佳实践,或者在Activity代码和XML布局之间创建一些不合理的纠结.
以下是我的一些想法,其中没有一个看起来非常正确:
large设备上执行,这意味着混合代码,用于检查活动代码可用的布局.normal大小的设备上,它可以根据需要交换MainFragment和SubordinateFragment.最后我不认为这解决了问题,因为MainActivity仍然依赖于布局文件来告诉它显示哪些和多少片段.这也违反了Activity表示用户所做的离散事物的原则.以下是我一直在努力解决此问题的一些资源.正如我所说,这似乎是一个常见的问题,但似乎没有规范的Android解决方案.这是一个缺点,因为文档建议使用Fragments,而每个开发人员都会遇到这个问题.
简介:我有多窗格模式适用于xlarge设备.我试图解决的问题是在large只能处理横向多个窗格的设备上切换单窗格(纵向)和多窗格(横向)模式.
user-interface android screen-orientation android-layout android-fragments
我实现了onConfigurationChnage(..)来读取方向配置chnage上的视图高度和宽度值
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
DisplayMetrics displaymetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
int height = displaymetrics.heightPixels;
int width = displaymetrics.widthPixels;
Log.i(TAG, "onConfigurationChanged: "+newConfig.orientation+", "+height+", "+width + ", "+mTempeFrameLayout.getWidth());
}
Run Code Online (Sandbox Code Playgroud)
但它总是回复旧值,如果方向得到改变,它给出了最后的方向(可能)值.
使用displaymetrics的屏幕宽度/高度正确,但对于任何视图都不起作用.
任何人都有想法..如何在方向变化上得到正确的价值?
我正在使用Cordova 3.3.0和我的Galaxy S3(运行最新的Cyanogenmod)来测试我正在使用的应用程序; 我需要应用程序屏幕保持"纵向"模式并即使用户旋转设备也会被锁定.无论我尝试过什么或我遵循的教程,应用程序都忽略了锁定屏幕的首选项.我究竟做错了什么?
这是我的config.xml:
<?xml version='1.0' encoding='utf-8'?>
<widget id="com.numediaweb.test" version="0.0.1" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
<name>Test</name>
<description>
Test.</description>
<author href="http://test.com" email="abdel@test.com">
me
</author>
<content src="index.html" />
<access origin="*" />
<preference name="orientation" value="portrait" />
<preference name="fullscreen" value="true" />
<preference name="SplashScreen" value="splash" />
<preference name="SplashScreenDelay" value="3000" />
</widget>
Run Code Online (Sandbox Code Playgroud) 我想以纵向模式运行我的应用程序,我知道这不是最佳做法,但有理由这样做.虽然我已经禁用了旋转,但它仍然可以在某些视图上旋转,而在其他视图上则不会.
我的Android Manifest中有这部分代码:
<activity
android:name="<name>.app.MainActivity"
android:label="@string/app_name"
android:configChanges="keyboardHidden|keyboard|locale|orientation"
android:screenOrientation="portrait">
Run Code Online (Sandbox Code Playgroud)
我正在使用片段根据用户输入显示不同的容器.
这是唯一具有碎片的活动.我在这个网站上尝试了一些解决方案.包括按代码设置纵向模式
如果您使用的是Android设备,则会发现某些应用会强制显示屏显示并忽略设备的方向传感器.在真实设备上,这不是问题,因为您可以手动旋转设备以使用该应用程序.
但是,我试图在Linux Mint PC上的Oracle VirtualBox中的android-x86上使用这样的应用程序,并且无法物理旋转我的显示器.我已经尝试了向应用程序发送旋转事件的f9-f12键,但由于方向已修复,因此无效.
如果不让我的脖子以90°的角度碾压,我怎样才能配置android-x86,VirtualBox和/或Linux以正确显示应用程序?要清楚,我无权访问应用程序的源代码.
android virtualbox orientation screen-orientation android-x86
这是一个很受欢迎的问题,但我找不到任何适用于Swift 2的解决方案.
该应用程序仅限肖像.但在观看YouTube等全屏视频时,用户应该可以旋转到横向.
在Objective C上,这是最简单的解决方案,我使用了很长时间:
AppDelegate file:
static NSString * const VIDEO_CONTROLLER_CLASS_NAME_IOS7 = @"MPInlineVideoFullscreenViewController";
static NSString * const VIDEO_CONTROLLER_CLASS_NAME_IOS8 = @"AVFullScreenViewController";
- (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window{
if ([[window.rootViewController presentedViewController] isKindOfClass:NSClassFromString(VIDEO_CONTROLLER_CLASS_NAME_IOS7)] ||
[[window.rootViewController presentedViewController] isKindOfClass:NSClassFromString(VIDEO_CONTROLLER_CLASS_NAME_IOS8)]) {
return UIInterfaceOrientationMaskAllButUpsideDown;
} else {
return UIInterfaceOrientationMaskPortrait;
}
}
Run Code Online (Sandbox Code Playgroud)
这允许在视频全屏时的所有方向.否则,仅限肖像.
但是我很难在Swift上完成这项工作.当全屏视频是Swift上的播放器时,是否可以使屏幕旋转?
我设置了锁定方向
并添加了2个简单类的示例代码,如下所示:
SplashLandscapeActivity.java
public class SplashLandscapeActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d("start", "xxxx start Activity SplashLandscapeActivity");
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
startActivity(new Intent(SplashLandscapeActivity.this, TestActivity.class));
finish();
}
}, 500);
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.d("start", "xxxx onDestroy Activity SplashLandscapeActivity");
}
}
Run Code Online (Sandbox Code Playgroud)
TestActivity.java
public class TestActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d("start", "xxxx start Activity TestActivity "
+ getResources().getConfiguration().orientation);
}
@Override
protected void onDestroy() …Run Code Online (Sandbox Code Playgroud) android ×8
android-x86 ×1
c# ×1
cordova ×1
fragment ×1
ios ×1
java ×1
orientation ×1
rotation ×1
swift ×1
swift2 ×1
tabs ×1
view ×1
virtualbox ×1