我在LinearLayout中有一些ImageView.我需要缩小ImageViews,以便它们保持纵横比,同时垂直安装在LinearLayout内部.水平地,我只需要它们彼此相邻.
我为此制作了一个简化的测试床,它嵌套了加权的布局,这样我就可以为ImageViews提供一个宽但不高的LinearLayout -
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent">
<LinearLayout android:id="@+id/linearLayout1" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="5">
<LinearLayout android:id="@+id/linearLayout3" android:layout_height="fill_parent" android:layout_width="fill_parent" android:layout_weight="1">
<ImageView android:id="@+id/imageView1" android:layout_height="wrap_content" android:layout_width="wrap_content" android:src="@drawable/test_image" android:scaleType="fitStart"></ImageView>
<ImageView android:id="@+id/imageView2" android:layout_height="wrap_content" android:layout_width="wrap_content" android:src="@drawable/test_image" android:scaleType="fitStart"></ImageView>
</LinearLayout>
<LinearLayout android:id="@+id/linearLayout4" android:layout_height="fill_parent" android:layout_width="fill_parent" android:layout_weight="1"></LinearLayout>
</LinearLayout>
<LinearLayout android:id="@+id/linearLayout2" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1"></LinearLayout>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
(在Eclipse布局编辑器中,图像被垂直剪切而根本没有缩放 - 但这只是我们学会爱的那些特性之一)
在硬件上运行时,图像会缩放到正确的高度,同时保留其纵横比.我的问题是他们不是彼此相邻的.每个ImageView的高度正确匹配LinearLayout的高度.每个ImageView的宽度是未缩放图像的宽度 - 实际按比例缩小的图像出现在其ImageView的左侧.因此,我在图像之间会有很大的差距.
理想情况下,我想通过XML来管理这个,如果这是不可能的,我理解使用自定义视图可能是最好的解决方案.
我尝试创建一个IconView(扩展ImageView)类来覆盖onMeasure,这样我就可以通过根据高度缩放宽度来创建所需大小的图像视图.但是传递给函数的parentWidth和parentHeight是屏幕的尺寸而不是LinearLayout容器的尺寸.
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int parentWidth = MeasureSpec.getSize(widthMeasureSpec);
int parentHeight = MeasureSpec.getSize(heightMeasureSpec);
// Calculations followed by calls to setMeasuredDimension, setLayoutParams
super.onMeasure(widthMeasureSpec, heightMeasureSpec); …Run Code Online (Sandbox Code Playgroud) 我GOOGLE了这个问题很多,已经发现,当使用许多不同的建议getBaseContext,getApplicationContext或活动本身的这个指针.
经常出现并且似乎很有意义的三条规则是 -
假设这些是正确的,getBaseContext有什么用?
我见过许多使用以下方法创建新意图的例子 -
Intent intent = new Intent(getBaseContext(), myClass.class);
Run Code Online (Sandbox Code Playgroud)
与 - 相反 -
Intent intent = new Intent(this, myClass.class);
Run Code Online (Sandbox Code Playgroud)
哪个是正确的或推荐的方法,为什么?
我被问到我需要哪种格式的音乐用于我的项目,看看文档,似乎Android平台提供了一个很好的选择.
音频当然不是我的强项,所以我想知道是否有最适合Android播放的特定格式?想到的主要因素是解压缩和回放的大小和CPU开销.(音乐将在游戏的背景中播放,但它不是特别CPU密集型游戏).
任何建议都会非常受欢迎.
我正在研究一些SQLite代码,并希望检查数据库.如果我在模拟器上运行代码,我可以使用DDMS文件管理器从data\data\myProject\databases中提取文件,但如果我在实际硬件上运行它,则无法访问data\data文件夹.除了获得手机的root访问权限之外还有其他方法吗?
对于数据的持久存储,使用SQLlite数据库而不是SharedPreferences有什么明显的优势,反之亦然?目前我的应用程序数据只有几千字节,但可能会在未来增加到这么大的十倍.我无法找到任何说明使用SharedPreferences可用存储量的地方,但是可以想象这将是使用它的一个限制吗?这两种方法的速度有什么不同吗?我想要权衡这两种存储方法的优缺点.
我一直在研究在转弯之间保存游戏数据的替代方法,并想知道是否有人可以指出我正确的方向.
我有大约32k的数据,必须在onPause期间保存.由于数据量巨大,我排除了偏好.我花了几天时间玩SQLite,却无法在不到两秒的时间内获得数据保存(虽然时间肯定没有浪费).
我决定在游戏开始时使用数据库加载常量数据.这肯定会更容易调整游戏中的各种参数和默认值.但这仍然让我寻找理想的数据写入方法.
需要保存的数据基本上是9次出现A类,9次出现B类.我是Android学习曲线的密集月份(以及Java的细微差别,来自C++背景)并且一直在谷歌搜索疯了一样.这带来了两种可能性 -
1)序列化(ObjectOutputStream)
我认为这将是一个完美的解决方案,但是,在阅读了有关该主题的其他几篇文章之后,由于速度和内存分配导致垃圾收集器陷入潜在的愤怒,因此不会强烈建议在Android平台上使用它.
2)DataOutputStream类
我目前的想法是向两个类添加加载和保存函数,并使用其中的DataOutputStream和DataInputStream调用分别写入和读取数据.
类中的数据是基元(主要是字符串和整数)和基元数组,因此没有什么太复杂可以分解.这第二个解决方案看起来是一个好的,可行的吗?或者还有其他解决方案我还没有意识到吗?
我为我的应用程序设置了一个系统托盘图标,并附加了一个简单的上下文菜单.如果我右键单击该图标以显示上下文菜单,它可以正常工作.如果我然后单击丢失应用程序焦点的某个地方(例如,任务栏上的其他位置或其他应用程序),则不会删除上下文菜单,并且在单击时仍会触发正确的操作.但是,如果我单击主应用程序,则上下文菜单会按预期消失.
以下是创建托盘图标和上下文菜单的相关代码 -
actionExit = new QAction( "Exit", this );
connect( actionExit, SIGNAL( triggered() ), this, SLOT( ExitClient() ));
myTrayIconMenu = new QMenu( this );
myTrayIconMenu->addAction( actionExit );
trayIcon = new QSystemTrayIcon( icon, this );
trayIcon->setContextMenu( myTrayIconMenu );
connect( systrayIcon, SIGNAL( activated( QSystemTrayIcon::ActivationReason )),
this, SLOT( ToggleVisibility( QSystemTrayIcon::ActivationReason )));
trayIcon->show( );
Run Code Online (Sandbox Code Playgroud)
我是否需要添加自己的代码来测试应用程序失去焦点,以便我可以手动隐藏上下文菜单?我曾假设这个功能将被内置.
[问题出现在Windows 7中,通过Qt插件使用Visual Studio 2010 Pro进行编译 - 我没有在任何其他操作系统下测试过]
我在API文档中注意到了这一点 -
注意:系统托盘图标不取决于菜单的所有权.您必须确保在适当的时候删除它,例如,使用合适的父对象创建菜单.
如果我使用
myTrayIconMenu = new QMenu( );
Run Code Online (Sandbox Code Playgroud)
代替
myTrayIconMenu = new QMenu( this );
Run Code Online (Sandbox Code Playgroud)
当应用程序失去焦点时,将删除上下文菜单.但是,我需要注意手动删除上下文菜单.
其他人如何处理这种情况?
目前我将我的HTML,JS,CSS,图形等本地存储在硬盘上并使用它们进行访问QWebFrame::SetUrl( QUrl::fromLocalFile( "appFolder\html\index.html" )).在某些时候,我将需要加密本地存储的文件,所以我正在寻找一种方法来解密它们,或者将它们全部解密到内存中并以这种方式访问它们.
我知道我可以用来QWebFrame::setContent( htmlData )从内存中加载HTML,这样我就可以加载加密的HTML文件,在内存中解密,然后以这种方式显示,但我怎么去其他数据(JS,CSS,图形等)哪个目前存储在子文件夹中?
或者,有没有办法可以拦截访问所有HTML,JS,CSS等文件的请求,并在加载时解密它们?
通过使用我自己的NetworkAccessManager我可以拦截调用,createRequest所以我可以看到每个文件被加载时,但我不知道如何使用它来动态解密数据.我还可以将插槽功能连接到finished(QNetworkReply*)信号,但此时数据已经被读取 - QIODevice当前位置指向文件的末尾.
我会非常感谢任何有关正确方向的建议或指示.
android ×6
qt ×2
audio ×1
contextmenu ×1
custom-view ×1
ddms ×1
file ×1
formatting ×1
imageview ×1
layout ×1
lifecycle ×1
mp3 ×1
ogg ×1
qmenu ×1
qtwebkit ×1
sqlite ×1
storage ×1
system-tray ×1
webkit ×1
windows ×1