我添加了一个片段
transaction.add(R.id.content, fragment, null);
Run Code Online (Sandbox Code Playgroud)
我需要从这个开始新的片段.但要做到这一点,我需要知道第一个片段的容器视图ID(在我的例子中是R.id.content).我怎么能得到这个?
我可以直接使用这个id,但我想片段不应该知道有关父活动的这类细节.例如,在这种情况下,不可能在另一个活动中使用此片段.
可能是从另一个"起始"片段是一个不好的做法,所有片段处理逻辑应该由活动本身处理?但是创建好的片段序列相互启动似乎非常有用(例如detalView-> moreDetailView-> evenMoreDetailView).
在Android Studio中,我使用密钥库生成了已签名的APK,依此类推.将APK安装到设备上时失败并显示"无法安装应用程序",而在Android监视器中,我看到以下行:
Package com.my.app has no certificates at entry AndroidManifest.xml; ignoring!
Run Code Online (Sandbox Code Playgroud)
有人知道什么是错的吗?
在Kotlin中,如果对象不是null,我可以运行代码:
data?.let {
... // execute this block if not null
}
Run Code Online (Sandbox Code Playgroud)
但如果对象为null,我该如何执行代码块?
正如http://developer.android.com/guide/practices/screens_support.html所述,出于兼容性原因,我的AndroidManifest.xml包含以下内容:
<uses-sdk android:minSdkVersion="3" android:targetSdkVersion="4"/>
Run Code Online (Sandbox Code Playgroud)
这会在eclipse中生成警告:
属性minSdkVersion(3)低于项目目标API级别(4)
有没有办法压制这个警告或以任何其他方式摆脱它?这真的很烦人.
从Java访问Kotlin类时,是否可以在运行时告知特定字段是否可以为空?此外,是否可以判断一个类是否是一个数据类?
即便猜测也足以满足我的目的.使用反射也很好.
我想编写修改"this"的扩展函数,例如:
var a = false
a.toggle() // now a contains false
Run Code Online (Sandbox Code Playgroud)
要么
var a = 1
a.increment() // now a contains 2
Run Code Online (Sandbox Code Playgroud)
在Kotlin有可能吗?
我可以创建返回修改值的扩展函数,但保留"this"未修改,但我想要更方便!看起来Swift可以做到这一点.
我需要将一些像素着色器应用于位图(使用OpenGL)并将结果发送到服务器.渲染应该在后台进行,所以我不能为此创建GLSurfaceView.所以我的问题是:是否可以在不使用GLSurfaceView的情况下在Android上进行OpenGL渲染?喜欢直接渲染到位图,画布或某种缓冲/数组?或者可以通过它使用某种虚拟GLSurfaceView?
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<include
layout="@layout/view1"
android:layout_gravity="center_vertical" />
<include
layout="@layout/view2"
android:layout_gravity="center_vertical" />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
那么,android:layout_gravity会一直被忽略吗?这对于代码可重用性来说真的很糟糕......看起来layout_margin也不支持.
这是view1.xml布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:minHeight="45dip"
android:background="@drawable/updater_background" >
<ProgressBar
style="?android:attr/progressBarStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginRight="7dip"
android:visibility="gone" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical" />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud) 它看起来像我们并不需要使用kapt的@OnLifecycleEvent注释工作.那么,他们如何联系起来呢?它是某种运行时注释处理吗?
我问,因为我很好奇使用这些注释的成本是多少.使用它们会影响应用程序启动时间吗 还是项目编译时间?
图像按矩阵缩放:
Matrix matrix = new Matrix();
matrix.postScale(...);
matrix.postTranslate(...);
matrix.postRotate(...);
...
Run Code Online (Sandbox Code Playgroud)
我希望缩放的图像不会小于原始图像的一半,因此总变焦不应小于0.5.
但是怎么做呢?我试图获取矩阵的第一个值来检查:
float pendingZoom = 0.6f;
float[] values = new float[9];
Matrix.getValues(values);
float scalex = values[Matrix.MSCALE_X];
Run Code Online (Sandbox Code Playgroud)
然后:
if(scalex<0.5) {
pendingZoom = pendingZoom * (0.5f / scalex);
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,它有时不起作用.如果图像已旋转,则scalex可能为负,pendingZoom也将为负.
怎么做到这一点?
UPDATE
我刚发现values[Matrix.MSCALE_X]它不是一个可靠的缩放值.我用它来计算矩形的新宽度,这是不正确的.
相反,我试图用矩阵映射两个点,并计算两个距离:
PointF newP1 = mapPoint(matrix, new PointF(0, 0));
PointF newP2 = mapPoint(matrix, new PointF(width, 0));
float scale = calcDistance(newP1, newP2) / width;
Run Code Online (Sandbox Code Playgroud)
我scale现在可以得到正确的价值.但我不确定这是否是最佳解决方案.
android ×7
kotlin ×3
android-architecture-components ×1
android-view ×1
containers ×1
include ×1
install ×1
java ×1
keystore ×1
layout ×1
matrix ×1
opengl-es ×1
rotation ×1
scale ×1
zoom ×1