谁能解释为什么isAttachedToWindow()是false而不是true?我似乎有附件问题。
据我了解,setContentView(rl)应该将其附加RelativeLayout到窗户上。我缺少什么?
public class TestActivity extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final RelativeLayout rl = new RelativeLayout(this);
setContentView(rl);
boolean isAttached = rl.isAttachedToWindow();
}
}
Run Code Online (Sandbox Code Playgroud) 没有调用Observer方法.我ViewPagerCycler按照旧学校的方式测试并且工作完美.感谢帮助.
public final class ViewPagerCycler implements LifecycleObserver {
private static final int PERIOD = 3000;
private Timer mTimer;
private TimerTask mTask;
private Activity mActivity;
private ViewPager mPager;
public ViewPagerCycler(Activity activity, ViewPager pager) {
mActivity = activity;
mPager = pager;
}
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME) public void start() {
int count = mPager
.getAdapter()
.getCount();
mTimer = new Timer();
mTask = new TimerTask() {
@Override public void run() {
mActivity.runOnUiThread(new TimerTask() {
@Override public void run() {
mPager.setCurrentItem((mPager.getCurrentItem() + 1) % count, …Run Code Online (Sandbox Code Playgroud) 我希望在构建类型中使用不同versionCode的debug构建类型而不是release构建类型.这曾经在Gradle Android插件v2.3.2(Gradle v3.3)中使用下面的配置工作,但现在在v3.0.0-alpha5(Gradle v4.1-milestone-1)中没有任何效果.关于最新的Gradle插件中哪些内容发生了变化的想法让它忽略了variant.mergedFlavor.versionCode属性?
buildTypes {
debug {
applicationIdSuffix ".debug"
versionNameSuffix "-" + buildTime()
android.applicationVariants.all { variant ->
if (variant.buildType.name != buildTypes.debug.name) return
variant.outputs.all {
outputFileName = "${archivesBaseName}-${variant.name}-v${variant.versionName}-signed.apk"
variant.mergedFlavor.versionCode = Integer.parseInt(buildTimeSmall())
}
}
}
}
Run Code Online (Sandbox Code Playgroud) 我一直在寻找ConstraintLayout从A点到B点动画对象的最简单方法,能够改变其持续时间和加速度.例如,在屏幕上设置约束的情况下,将布局/视图从屏幕底部移动到其预期位置.我无法找到如何为对象做到这一点ConstraintLayout.任何人都可以指出我正确的方向?谢谢.
animation android android-animation kotlin android-constraintlayout
这是我需要实现的效果AnimatedVectorDrawableCompat。
vector_drawable_anim.xml
<animated-vector xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/vector_drawable">
<target
android:name="star"
android:animation="@animator/star_anim"/>
</animated-vector>
Run Code Online (Sandbox Code Playgroud)
vector_drawable.xml
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="500px"
android:height="500px"
android:viewportHeight="500"
android:viewportWidth="500">
<group
android:name="star_group"
android:scaleX="5.0"
android:scaleY="5.0">
<path
android:name="star"
android:pathData="M 50.0,90.0 L 82.9193546357,27.2774101308 L 12.5993502926,35.8158045183 Z"
android:strokeColor="@color/colorAccent"
android:strokeWidth="1"/>
</group>
</vector>
Run Code Online (Sandbox Code Playgroud)
star_anim.xml
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:ordering="sequentially">
<objectAnimator
android:duration="1000"
android:propertyName="trimPathStart"
android:valueFrom="1"
android:valueTo="0"/>
<objectAnimator
android:duration="1000"
android:propertyName="trimPathEnd"
android:valueFrom="1"
android:valueTo="0"/>
</set>
Run Code Online (Sandbox Code Playgroud)
但是AnimatorSet不能设置repeatMode。
如果我设置objectAnimator的repeatMode,第二个objectAnimator将不显示。
我该怎么办?

android android-animation android-vectordrawable animatorset
我需要使用意图过滤器指定我的登录活动:
<activity
android:name=".view.LoginActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="com.example.sdk.LOGIN" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
Run Code Online (Sandbox Code Playgroud)
我想这样做的原因是我正在开发一个我想在几个项目中使用的 SDK,这是我能弄清楚如何通知 SDK 是登录活动的最好方法,而它是仅在 app 模块中定义。
在我做这样的声明后,我开始像这样的登录活动(在库和应用程序中):
Intent intent = new Intent();
intent.setAction("com.example.sdk.LOGIN");
context.startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
有可能在同一设备上同时安装两个或多个依赖于同一个 SDK 的应用程序。如果我理解正确,在这种情况下,在这些应用程序中的每一个中,Activity start 将启动一个随机登录活动(应用程序 A 中的调用可能会启动应用程序 B 的登录)。
也欢迎提出重用登录相关逻辑的替代方法的建议,而不是依赖意图过滤器。
android intentfilter android-intent android-activity android-intent-chooser
我有一个LinearLayout,我正在CardView像这样膨胀一个:
final LinearLayout itineraryDetailLL = (LinearLayout) findViewById(R.id.itineraryDetailLinearlayout);
final View childView = getLayoutInflater().inflate(R.layout.cardview, null);
itineraryDetailLL.addView(childView);
Run Code Online (Sandbox Code Playgroud)
子视图的膨胀是通过单击按钮完成的。每当新的卡片视图膨胀时,我都想滚动到屏幕底部。我是这样做的:
ScrollView scrollview = ((ScrollView) findViewById(R.id.masterScrollView));
scrollview.fullScroll(View.FOCUS_DOWN);
Run Code Online (Sandbox Code Playgroud)
但这会滚动到屏幕中间而不是底部。我究竟做错了什么?
android scrollview android-layout android-scrollview android-view
我有一个RecyclerViewwith GridLayoutManager,其中包含各种ViewTypes(以及SpanSizes )的项目。我需要为所有R.layout.item_image类型圆角,如下图所示
所以我创建了一个ItemDecoration计算Rect这些项目将被绘制的对象。然后将其剪辑Canvas到此Rect(用于Path圆角):
public class RoundCornersDecoration extends RecyclerView.ItemDecoration {
private final float radius;
private final RectF defaultRectToClip;
public RoundCornersDecoration(float radius) {
this.radius = radius;
defaultRectToClip = new RectF(Float.MAX_VALUE, Float.MAX_VALUE, 0, 0);
}
@Override
public void onDraw(Canvas canvas, RecyclerView parent, RecyclerView.State state) {
final RectF rectToClip = getRectToClip(parent);
// has no items with ViewType == `R.layout.item_image`
if (rectToClip.equals(defaultRectToClip)) {
return;
} …Run Code Online (Sandbox Code Playgroud) android android-custom-view android-canvas android-view android-recyclerview
在活动A中,我正在加载一个包含我表中所有值的列表,并设置了一个setOnItemClickListener来启动活动B并通过发送数据发送带有所选项的id [ 1 ] 的uri
[ 1 ]
Uri currentTestUri = ContentUris.withAppendedId(TestEntry.CONTENT_URI, id);
在活动B中,我的onCreateLoader包含投影:
String[] projection = {
TestEntry._ID,
TestEntry.COLUMN_TEST_ONE,
TestEntry.COLUMN_TEST_TWO}
Run Code Online (Sandbox Code Playgroud)
...带有return语句
return new CursorLoader(this,
mCurrentTestUri, //Got this from Activity A
projection,
null,
null,
null);
Run Code Online (Sandbox Code Playgroud)
我的onLoadFinished看起来像这样:
if (cursor.moveToFirst()) {
int oneColumnIndex = cursor.getColumnIndex(TestEntry.COLUMN_TEST_ONE);
int twoColumnIndex = cursor.getColumnIndex(TestEntry.COLUMN_TEST_TWO);
String currentOne = cursor.getString(oneColumnIndex);
String currentTwo = cursor.getString(twoColumnIndex);
textViewOne.setText(currentOne);
textViewTwo.setText(currentTwo);
}
Run Code Online (Sandbox Code Playgroud)
到目前为止一切顺利,现在我希望显示下一行(右下方)的值,但是使用不同的投影(我只需要_ID和COLUMN_TEST_ONE)并且onLoadFinished显示COLUMN_TEST_ONE的值textViewThree.
[两行的值应该同时显示,而不是一个或另一个]
我可以使用[ …
sqlite android android-cursorloader android-loader android-sqlite
是否可以提供一次自己的ViewModelStoreforViewModelProviders实现来代替默认的实现?
更准确地说,我有兴趣添加fun clear(vm: ViewModel)(或使用索引或类似的东西)功能,以便ViewModelStore我可以清除我选择的单个视图模型,而不仅仅是使用内置的ViewModelStore#clear:
public final void clear() {
for (ViewModel vm : mMap.values()) {
vm.onCleared();
}
mMap.clear();
}
Run Code Online (Sandbox Code Playgroud)
这会清除所有视图模型。
java inheritance android android-viewmodel android-architecture-components
android ×10
android-view ×3
android-architecture-components ×2
animation ×1
animatorset ×1
build.gradle ×1
gradle ×1
groovy ×1
inheritance ×1
intentfilter ×1
java ×1
kotlin ×1
scrollview ×1
sqlite ×1