我可以通过来电或短信来获取电话号码.不幸的是,在SMS的情况下,可能有国家代码.所以,基本上我需要获取没有国家代码的普通电话号码,以便将其与联系人中的现有号码进行比较.
我已经在Android中制作了一段时间的自定义按钮.事情很简单,只是为按钮状态创建了图像资源,并为它做了一个选择器.一切顺利而美好.现在我遇到了一个新情况.我制作了一个可绘制的动画并将其设置为我按钮的背景.
<animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false">
<item android:drawable="@drawable/frame1" android:duration="600" />
<item android:drawable="@drawable/frame2" android:duration="300" />
<item android:drawable="@drawable/frame3" android:duration="500" />
</animation-list>
Run Code Online (Sandbox Code Playgroud)
如果我将动画设置为按钮的背景,它可以正常工作.如果我尝试制作一个简单的选择器
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_pressed="false"
android:drawable="@drawable/animation" />
<item
android:state_pressed="true"
android:drawable="@drawable/pressed" />
</selector>
Run Code Online (Sandbox Code Playgroud)
按钮的正常状态将动画作为背景,按下状态是静态图像,事情不能正常工作.
在我的主要活动中,在onWindowFocus上,我得到按钮背景并开始动画
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
btn = (Button)findViewById(R.id.btnAnim);
btnAnimation = (AnimationDrawable) btnAnim.getBackground();
btnAnimation.start();
}
Run Code Online (Sandbox Code Playgroud)
这似乎是问题,因为我的动画将无法从选择器中正确获取,我收到以下错误:
03-14 15:21:16.146: ERROR/AndroidRuntime(440): FATAL EXCEPTION: main
03-14 15:21:16.146: ERROR/AndroidRuntime(440): java.lang.ClassCastException: android.graphics.drawable.StateListDrawable
03-14 15:21:16.146: ERROR/AndroidRuntime(440): at com.bebenjoy.MainActivity.onWindowFocusChanged(MainActivity.java:53)
03-14 15:21:16.146: ERROR/AndroidRuntime(440): at ...
Run Code Online (Sandbox Code Playgroud)
有关如何解决此问题的任何想法?谢谢.
事情应该很简单,但在大多数情况下,在Android中,不是.如果用户在我的应用程序中选择该选项,我需要格式化SD卡.如果它已经在操作系统中,请不要问我为什么需要这样做...不实用但是我需要实现它.您可能知道,Settings\Storage\Erase SD Card中有一个选项.我看了一下froyo源代码,它是这样的:
final IMountService service =
IMountService.Stub.asInterface(ServiceManager.getService("mount"));
if (service != null) {
new Thread() {
public void run() {
try {
service.formatVolume(Environment.getExternalStorageDirectory().toString());
} catch (Exception e) {
// Intentionally blank - there's nothing we can do here
Log.w("MediaFormat", "Unable to invoke IMountService.formatMedia()");
}
}
}.start();
} else {
Log.w("MediaFormat", "Unable to locate IMountService");
}
Run Code Online (Sandbox Code Playgroud)
它使用android.os.storage.IMountService
和android.os.ServiceManager
我似乎无法访问它.所以,正如我所看到的那样,我可以递归搜索每个文件并将其删除,但这将"不符合我的口味"......或者我可以从Erase SD卡启动屏幕到用户.
任何帮助都是受欢迎的,因为我被困住了.
数学再一次打败了我.这是一项非常简单的任务,但我无法完成任务.
场景:我在SurfaceView上绘制一个圆形图像.用户触摸图像边框上的一个点并开始将其拖动到周围.我需要根据用户的移动旋转圆形图像.我有两个重要的信息,图像中心X,Y坐标和触摸点坐标.
正如您在图像中看到的那样,用户触摸了一个点,根据我的绘制,触摸点角度应该在40左右.我无法正确计算它.
我尝试使用这个公式:
angle = Math.atan2(touchedY - centerY, touchedX - centerX) * 180 / Math.PI
Run Code Online (Sandbox Code Playgroud)
我无法理解我应该如何计算角度,就像现在一样,它不能正常工作并且值不好.例如,在图像的情况下,角度计算是-50.
感谢您的时间,任何信息都很乐意接受.
LE:其实我认为我犯了一个错误,如下所述.圈子应该是这样的:
可能重复:
格式化货币输入editText的更好方法?
问题很简单,基本......但我找不到合适的方法来处理它.我有一些带有货币值的字段,我需要同时拥有货币符号和小数值.这就是我所说的:
用户将输入值:1然后.然后是8然后是0.欧元符号我希望它一直可见.
实现这一目标的最佳方法是什么?
我对导航组件如何适应应用程序行为感到有些困惑。在教程中,您所做的事情并不会太复杂,但是在实际应用中实施时,情况似乎有所不同。
导航之前
在实施导航之前,我必须手动运行片段事务。为了做到这一点,我的片段将实现一个接口onFragmentAction
,该接口将a传递bundle
给主体,Activity
并在基于动作的活动中,用另一个替换当前片段。
需要处理的第二部分是顶部的工具栏和BottomAppBar
。例如,BottomAppBar
需要FAB
在某些片段上进行不同的对齐,或者在其他片段中进行隐藏。同样,顶部ToolBar
需要在某些位置上扩展或在其他位置上折叠。为此,我听了FragmentManager.OnBackStackChangedListener
并且基于fragment标签相应地getSupportFragmentManager().getBackStackEntryAt(size - 1).getName()
更改了布局。
带导航
第一部分似乎很容易做到:传递参数并开始新的片段。但是我不知道导航是否可以处理工具栏管理,或者我需要继续从“活动”中进行管理。
android android-architecture-components android-jetpack android-architecture-navigation
现在怎么样
这已在许多问题中讨论过,但两者都没有提供良好的解决方案.事情看起来很简单,因为有一个BroadcastReceiver很容易拦截和阻止一个电话.出现的主要问题是默认的Android来电屏幕.你知道,有一个用于接听/结束通话的滑块.因为我有一些阻止呼叫的规则,所以在呼叫挂起之前会有一点延迟.在所有这些时间,来电呼叫屏幕都处于活动状态.
我多么想要的东西
我希望用户不会通过此调用阻止通知,因为在我的应用程序中我已经完成了所有块的清除日志.因此,最重要的是:如何阻止来电屏幕启动?
我从形状中制作了一个按钮背景,看起来非常适合我的目的.唯一需要的是为它投下一点阴影.这是代码:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<shape>
<solid android:color="#343434" />
<stroke android:width="1dp" android:color="#171717" />
<corners android:radius="3dp" />
<padding android:bottom="10dp" android:left="10dp" android:right="10dp" android:top="10dp" />
</shape>
</item>
<item>
<shape>
<gradient android:angle="270" android:endColor="#E2E2E2" android:startColor="#BABABA" />
<stroke android:width="1dp" android:color="#BABABA" />
<corners android:radius="4dp" />
<padding android:bottom="10dp" android:left="10dp" android:right="10dp" android:top="10dp" />
</shape>
</item>
</selector>
Run Code Online (Sandbox Code Playgroud)
这就是我想要实现的目标
我该如何掉落阴影?我的猜测是我需要制作另一个形状但是带有黑色/灰色背景并设置某种形式的左边缘填充以使其看起来像阴影.但我不知道该怎么做......而且文档对我没有多大帮助.
稍后编辑:我想在xml文件中添加阴影而不是代码.谢谢.
我有一个场景,我不知道要走哪条路.
脚本
该应用程序有一个Home活动,显示各种片段.片段中的数据可以来自Web或本地数据库,并使用asynctask进行检索.
从我看到的,我有两个选择:
将Asynctask放在父活动中,然后用于fragment.newInstance(parameters)
将结果传递给片段.但是,如果在我的asynctask中我需要更新片段的进度或一些信息,每次我都必须使用新的参数集调用newInstance.
添加片段并将asynctask放入其中,这样当需要进度时,我可以更新片段的视图,因为我可以访问它们+当asynctask完成时,我可以用信息填充列表.
什么是正确的方法?
LE:实际上对于第1点来更新片段我可以findFragmentById
在父活动中找到它之后调用片段的公共方法
我正在从我的应用程序打开YouTube视频,类似于这个答案:https://stackoverflow.com/a/12439378/379865
我想知道是否可以在指定的时间打开视频,所以例如视频在开始时从30秒开始运行,而不是从头开始.
android ×10
button ×2
android-architecture-components ×1
android-architecture-navigation ×1
animation ×1
atan2 ×1
currency ×1
erase ×1
format ×1
geometry ×1
math ×1
phone-call ×1
phone-number ×1
shape ×1