我遇到了一个问题,我有一个简单ListView
的东西BottomSheet
,ListView
有足够的项目来填充屏幕,滚动甚至更多.
当我向下滚动时,一切似乎都有效,但当我尝试向上滚动时,它滚动BottomSheet
自身并关闭视图而不是仅滚动ListView
.
过了一段时间我找到了一个解决方案,因为我在这里找不到它,我想我会把它发布在这里.
如何本地化启动器中显示的应用程序名称?
比如“Play Store”,中文就是“Play ??”。谢谢。
我试着android\app\src\main\AndroidManifest.xml
像这样修改:
android:label="@string/app_name"
Run Code Online (Sandbox Code Playgroud)
并创建文件
values-zh/strings.xml
values-en/strings.xml
Run Code Online (Sandbox Code Playgroud)
例子:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">App name in different language</string>
</resources>
Run Code Online (Sandbox Code Playgroud)
但是,仅当系统语言更改时,应用程序名称才会更改。这是 Android 中的常见问题(或已知错误?)?
在windows中,当应用程序语言改变时,应用程序名称会立即改变。
所以,我真正想要的是,当我的应用程序中的语言发生变化时,启动器中的应用程序名称也会发生变化,而忽略系统语言。
我有一个CardView
XML布局,我需要以编程方式设置边距(这是因为我不需要任何时间的边距.基于几个条件,我设置或删除边距).
我是这样做的:
CardView.LayoutParams layoutParams = (CardView.LayoutParams) myCardView.getLayoutParams();
layoutParams.setMargins(0, 0, SystemHelper.dpToPx(2), 0);
myCardView.setLayoutParams(layoutParams);
Run Code Online (Sandbox Code Playgroud)
这很好.它把2dp
保证金放在我的底部CardView
.但是,我在logcat中得到了这个:
java.lang.ClassCastException: android.widget.LinearLayout$LayoutParams cannot be cast to android.widget.FrameLayout$LayoutParams
Run Code Online (Sandbox Code Playgroud)
所以我改成CardView.LayoutParams
了FrameLayout.LayoutParams
,像这样:
FrameLayout.LayoutParams layoutParams = (FrameLayout.LayoutParams) myCardView.getLayoutParams();
layoutParams.setMargins(0, 0, SystemHelper.dpToPx(2), 0);
myCardView.setLayoutParams(layoutParams);
Run Code Online (Sandbox Code Playgroud)
然而,它仍然有效,但我得到与上面相同的错误.
所以我再修改一次使用它LinearLayout.LayoutParams
.
LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) myCardView.getLayoutParams();
layoutParams.setMargins(0, 0, SystemHelper.dpToPx(2), 0);
myCardView.setLayoutParams(layoutParams);
Run Code Online (Sandbox Code Playgroud)
当我这样做时,我没有得到错误,但它没有设置任何余量.
我应该忽略错误吗?这似乎不对.
编辑:
这是我CardView
的XML:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="horizontal"
android:background="@android:color/white"
android:minHeight="@dimen/item_min_height"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.v7.widget.CardView
android:id="@+id/cardViewAppointmentWeek"
app:cardElevation="2dp"
android:layout_marginBottom="2dp"
android:layout_width="match_parent"
android:layout_height="match_parent"> …
Run Code Online (Sandbox Code Playgroud) android android-layout layoutparams android-cardview android-layoutparams
我必须迭代130多个数据传输对象,并且每次都会生成一个json以上传到AWS S3。
如果不进行任何改进,则整个过程大约需要90秒。我尝试使用lamba而不是lamba,两者的结果相同。
for(AbstractDTO dto: dtos) {
try {
processDTO(dealerCode, yearPeriod, monthPeriod, dto);
} catch (FileAlreadyExistsInS3Exception e) {
failedToUploadDTOs.add(e.getLocalizedMessage() + ": " + dto.fileName() + ".json");
}
}
Run Code Online (Sandbox Code Playgroud)
dtos.stream().forEach(dto -> {
try {
processDTO(dealerCode, yearPeriod, monthPeriod, dto);
} catch (FileAlreadyExistsInS3Exception e) {
failedToUploadDTOs.add(e.getLocalizedMessage() + ": " + dto.fileName() + ".json");
}
});
Run Code Online (Sandbox Code Playgroud)
经过一番调查,我得出结论,processDTO方法运行每项大约需要0.650ms。
我的第一个尝试是使用并行流,结果非常好,大约需要15秒才能完成整个过程:
dtos.parallelStream().forEach(dto -> {
try {
processDTO(dealerCode, yearPeriod, monthPeriod, dto);
} catch (FileAlreadyExistsInS3Exception e) {
failedToUploadDTOs.add(e.getLocalizedMessage() + ": " …
Run Code Online (Sandbox Code Playgroud) 当我按下BACK按钮(onBackPressed()调用)关闭我的应用程序时,CountDownTimer
不会停止,直到完成计数.我怎么能把CountDownTimer
cancel(); 在我onBackPressed()
?
因为,当我退出我的应用程序时(如下面的描述所示),我不再需要在我的屏幕上进行反击.
在我的代码之上:
boolean network_connected = false;
Run Code Online (Sandbox Code Playgroud)
什么在我的onCreate()
:
if (check_network.isInternetAvailable(this)) {
network_connected = true;
new connect_task_main().execute("");
} else {
network_connected = false;
}
if (network_connected == false) {
new CountDownTimer(11000, 1000) {
public void onTick(long millisUntilFinished) {
global.toast.setText("No Internet Connection!" + "\n" + "Automatic Refresh In: " + millisUntilFinished / 1000); //set text for toast
global.toast.show(); //show toast
}
public void onFinish() {
if (network_connected == false) {
global.cancel_toast(0); //stop all …
Run Code Online (Sandbox Code Playgroud) 所以我想我有一个非常简单的问题,但我似乎无法弄清楚。
我有一个ImageView
,我正在使用它的setOnTouchListener
方法 ( OnTouch
)。
如何区分ACTION_DOWN
事件和ACTION_MOVE
事件?
甚至当我只需要点击(触摸)ImageView
,ACTION_MOVE
事件被调用。
我的目标是当用户点击它时打开它(做任何事情),并在用户握住它并移动它时移动它。
private int initialX;
private int initialY;
private float initialTouchX;
private float initialTouchY;
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
initialX = params.x;
initialY = params.y;
initialTouchX = event.getRawX();
initialTouchY = event.getRawY();
return true;
case MotionEvent.ACTION_UP:
return true;
case MotionEvent.ACTION_MOVE:
params.x = initialX + (int) (event.getRawX() - initialTouchX);
params.y = initialY + (int) (event.getRawY() - …
Run Code Online (Sandbox Code Playgroud) 我有一个'添加'按钮和一个带有6个插槽的GridLayout,当我点击'添加'按钮时,view1被添加到gridlayout中,我再次点击'添加'按钮,添加了view2,依此类推.
if (!theLayout1.isShown()) {
Grid.addView(theLayout1);
} else if (!theLayout2.isShown()) {
Grid.addView(theLayout2);
} else if (!theLayout3.isShown() ) {
Grid.addView(theLayout3);
} ..... // this goes on
Run Code Online (Sandbox Code Playgroud)
添加视图后,检查其文本是否已添加到sharedPrefs中,以便在重新创建活动时自动添加它们
if (prefs.getString("text4", null) != null) {
Grid.addView(theLayout4);
}
if (prefs.getString("text5", null) != null) {
Grid.addView(theLayout5);
}
// each view has one EditText
Run Code Online (Sandbox Code Playgroud)
我的问题是,如果我删除view1然后再添加它,它将被放置在我想要的最后一个插槽中,但是当我重新创建活动时它将返回到第一位,因为代码被读取在其中订购它将按初始顺序添加视图.
我希望在完成活动之前按顺序重新创建活动时添加视图,这可能有一个简单的逻辑解决方案,或者我只是非常错误地处理问题,无论如何,需要帮助!
首先,我一直在搜索这个过去2天,除了这个stackoverflow帖子之外我无法找到任何相关的内容 - 如何在android中读取tensorflow内存映射图形文件?
我通过以下链接成功地从其repo构建了android的tensorflow - https://github.com/tensorflow/tensorflow/tree/master/tensorflow/examples/android/
我能够使用ClassifierActivity将检测功能集成到我的项目中,并能够从中加载和读取自定义图形.我可以使用我的应用程序读取retrained_graph.pb或stripped_graph.pb甚至是optimize_graph.pb.
我用了 bazel build tensorflow/python/tools:optimize_for_inference
bazel build tensorflow/python/tools:strip_unused
获得优化和剥离图形的命令(尽管图表可以从服务器端获得).
但是当使用内存映射图时,我收到的错误是它无法读取图形.
从上面的stackoverflow 链接我确信它可以以某种方式完成.但是我没有在网上找到任何帮助从android端完成它.
请随时告诉我一些帖子或论坛,它们可以提供有关如何完成此操作的大量信息.我没有发布任何代码,因为我已经跟随tensorflow android 的github使其工作,我只是坚持这个.
提前感谢任何建议.
更新
以下是我尝试读取内存映射图时出现的错误
FATAL EXCEPTION: main Process: nanob2c.nano.com.nanob2c, PID: 2632
java.lang.RuntimeException: Failed to load model from 'file:///android_asset/optimized_mmapped_graph.pb'
at org.tensorflow.contrib.android.TensorFlowInferenceInterface.<init>(TensorFlowInferenceInterface.java:100)
at nanob2c.nano.com.nanob2c.tensorflow.core.TensorFlowImageClassifier.create(TensorFlowImageClassifier.java:109)
at nanob2c.nano.com.nanob2c.tensorflow.ClassifierActivity.onPreviewSizeChosen(ClassifierActivity.java:147)
at nanob2c.nano.com.nanob2c.tensorflow.core.CameraActivity$3.onPreviewSizeChosen(CameraActivity.java:603)
at nanob2c.nano.com.nanob2c.tensorflow.core.CameraConnectionFragment.setUpCameraOutputs(CameraConnectionFragment.java:425)
at nanob2c.nano.com.nanob2c.tensorflow.core.CameraConnectionFragment.openCamera(CameraConnectionFragment.java:432)
at nanob2c.nano.com.nanob2c.tensorflow.core.CameraConnectionFragment.access$000(CameraConnectionFragment.java:68)
at nanob2c.nano.com.nanob2c.tensorflow.core.CameraConnectionFragment$1.onSurfaceTextureAvailable(CameraConnectionFragment.java:99)
at android.view.TextureView.getHardwareLayer(TextureView.java:368)
at android.view.View.updateDisplayListIfDirty(View.java:15175)
at android.view.View.draw(View.java:15971)
at android.view.ViewGroup.drawChild(ViewGroup.java:3610)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3400)
at android.view.View.updateDisplayListIfDirty(View.java:15193)
at android.view.View.draw(View.java:15971)
at android.view.ViewGroup.drawChild(ViewGroup.java:3610)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3400)
at android.view.View.draw(View.java:16204)
at android.view.View.updateDisplayListIfDirty(View.java:15198)
at …
Run Code Online (Sandbox Code Playgroud) 问题:
我目前遇到一个问题,我的应用程序在首次打开时尝试加载太多片段。
我有BottomNavigationView
与ViewPager
该负载4个片段-的每一个Fragment
包含TabLayout
与ViewPager
负载至少 2个片段。
可以想象,这是很多UI渲染(10多个片段)的-特别是当其中一些片段包含繁重的组件(如日历,条形图等)时。
当前提出的解决方案:
在需要片段时控制UI加载-因此,直到用户第一次访问该片段,才有理由加载它。
似乎肯定有可能,包括Play商店在内的许多应用都在这么做。请在此处查看示例
在上面的视频示例中-导航到选项卡后,正在加载UI组件。它甚至具有嵌入式的加载符号。
1)我试图弄清楚该怎么做-在什么时候我知道需要创建该片段UI还是已经创建了它?
2)另外,我将在其中启动UI创建过程的片段生命周期回调是什么?onResume()
表示用户界面对用户可见,因此加载用户界面会很漫长和延迟。
希望这足够清楚。
编辑:
我已经在使用FragmentStatePagerAdapter
as ViewPager
适配器。我注意到super(fm)
构造器中的方法现在已被弃用:
ViewPagerAdapter(FragmentManager fm) {
super(fm); // this is deprecated
}
Run Code Online (Sandbox Code Playgroud)
所以我将其更改为:
ViewPagerAdapter(FragmentManager fm) {
super(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);
}
Run Code Online (Sandbox Code Playgroud)
BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT
:指示仅当前片段将处于Lifecycle.State.RESUMED状态。所有其他片段的上限为Lifecycle.State.STARTED。
这似乎是有用的作为onResume()
的Fragment
时候才会被称为Fragment
是对用户可见。可以通过某种方式使用此指示加载UI吗?
我将蓝牙添加到我的应用程序中,但遇到了以下问题。当我执行代码时:
BluetoothAdapter bluetoothAdapter=BluetoothAdapter.getDefaultAdapter();
if (bluetoothAdapter == null) {
Toast.makeText(getApplicationContext(),"Device doesnt Support Bluetooth",Toast.LENGTH_SHORT).show();
}
if(!bluetoothAdapter.isEnabled()) {
Intent enableAdapter = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableAdapter, 0);
}
Run Code Online (Sandbox Code Playgroud)
错误在以下行:
if(!bluetoothAdapter.isEnabled())
Run Code Online (Sandbox Code Playgroud)
错误:
缺少 BluetoothAdapter.isEnabled 所需的权限:android.permissions.BLUETOOTH
我向 android 清单文件添加了以下权限:
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<permission android:name="android.permission.BLUETOOTH" android:label="BLUETOOTH" />
<permission android:name="android.permission.BLUETOOTH_ADMIN" />
Run Code Online (Sandbox Code Playgroud)
但我仍然遇到同样的问题。你知道我做错了什么吗?
android ×9
java ×4
performance ×2
amazon-s3 ×1
aws-lambda ×1
back ×1
bluetooth ×1
bottom-sheet ×1
dart ×1
flutter ×1
java-stream ×1
layoutparams ×1
listview ×1
logic ×1
tensorflow ×1