小编Mis*_*ith的帖子

TextView:无法在运行时更改文本颜色

这是我在此的头一篇博文.我要TextView's在运行时更改文本颜色.有一个方法TextView.setTextColor(int),但它不适用于不在资源中的int值.

例如,在运行时计算的颜色(例如0xFF0000 (RGB),不存在)R.color不起作用.该TextView不会被渲染.
我已经看过这个Android的源代码,有两种方法,它们都不接受rgb int values作为参数:

/**
 * Sets the text color for all the states (normal, selected,
 * focused) to be this color.
 *
 * @attr ref android.R.styleable#TextView_textColor
 */
@android.view.RemotableViewMethod
public void setTextColor(int color) {
    mTextColor = ColorStateList.valueOf(color);
    updateTextColors();
}

/**
 * Sets the text color.
 *
 * @attr ref android.R.styleable#TextView_textColor
 */
public void setTextColor(ColorStateList colors) {
    if (colors == null) {
        throw new NullPointerException();
    } …
Run Code Online (Sandbox Code Playgroud)

android colors textview

2
推荐指数
1
解决办法
6426
查看次数

有没有办法在Android上安全地处理内存中的敏感数据?

我正在使用一些内容,我从Android中的文件解密,并且需要在内存中保留应用程序的整个持续时间.这是否是来自破解者的安全风险?如果是这样,Android是否提供某种形式的敏感内容内存保护,类似于Windows的进程安全内存访问保护机制?

我不是在私有模式下通过SharedPreferences寻找存储,我需要一些无法进行篡改的内存区域.将数据存储在本机缓冲区中是一条好路线吗?我也意识到不可变的,垃圾收集的String对象可能是存储这些数据的一个非常糟糕的主意,我目前正在使用char [].

memory security encryption android

2
推荐指数
1
解决办法
2533
查看次数

如何在没有收件人的情况下通过意图撰写短信

我想打开默认的短信应用程序并加载带有一些文字的内容,但我不想提供电话号码.相反,我想将该字段留空,以便用户可以选择收件人.

这是通常调用SMS应用程序的方式:

Intent intent = new Intent(Intent.ACTION_SENDTO, "smsto:666");
Run Code Online (Sandbox Code Playgroud)

但是,我想在打开电子邮件客户端时这样做:

Intent emailIntent = new Intent(Intent.ACTION_SEND);
Run Code Online (Sandbox Code Playgroud)

是否可以这样做?如果是这样,我应该将哪些属性设置为意图,以便打开SMS应用程序?

sms android android-intent

2
推荐指数
1
解决办法
1928
查看次数

ADT插件:布局编辑器中缺少属性

我在使用eclipse ADT插件时遇到了麻烦.在Eclipse的布局编辑器中,在图形和XML模式下,一切都很好.为方便起见,我主要使用图形编辑器设计GUI.

在某些时候,属性视图破了.现在它只显示"View"类的属性,并且不显示View子类中的每个其他属性(例如,未显示ImageView的属性).还缺少在RelativeLayout内部对齐的属性(例如alignParentTop).

这是一个"干净"的eclipse安装我只用于android,没有安装其他插件(除了subeclipse).它从来没有让我失望过.我已将SDK和插件更新到最新版本,但它没有解决此问题.Eclipse是v3.7 Indigo R2.也尝试清理项目无济于事.

你以前见过这种行为吗?是否有可能恢复图形编辑器并完全按预期工作而无需重新安装所有内容?

提前致谢.


更新:

我已经将问题追溯到单个布局XML.其他布局XML工作正常.问题是我使用DrawerLayout作为主要布局:

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android">
Run Code Online (Sandbox Code Playgroud)

如果我为常规替换此布局,则LinearLayout一切都恢复正常.我仍然需要找到一个解决方案,因为在图形布局上尝试的每个修改都会导致该元素被删除.所以这可能是一个错误,不仅不方便,而且危险!

eclipse android adt

2
推荐指数
1
解决办法
971
查看次数

如何将java 8添加到eclipse中

我有一台运行Windows XP 32的旧机器.

因为Oracle不再支持WXP 32位,所以我在这里按照了很棒的答案手动安装了jdk:

在Windows XP上安装JDK8 - advapi32.dll错误

但是我还没有将它添加到JAVA_PATH,它被设置为jdk 6.我不知道是否会伤害它也会有害,但我想在这里保守,因为这里有很多程序机器需要jdk 6.我现在不想破坏任何工作.

我想在eclipse中玩弄它来测试新的Java 8功能.我已经在窗口 - >首选项下的"已安装的JRE"部分中手动添加了新的jre 8.在编译器组合中,可用的最高级别是1.7(前一段时间安装了jdk7,这次是使用官方安装程序,但我仍然将java 6保留为系统中的默认值).我没有看到添加新关卡的任何选项.

因此,在使用新JRE创建新项目时,会显示一条警告:

当前工作空间使用1.4 JRE,编译器合规性级别为1.6.建议不要这样做,并且应该更改JRE或编译器合规性级别.

似乎是手动安装JDK导致的问题.

我正在使用Eclipse Kepler v4.3.1,但我也在旧的3.x安装中测试了这个,结果相同.

任何帮助将不胜感激.

java eclipse windows windows-xp java-8

2
推荐指数
1
解决办法
2096
查看次数

如何重用堆栈中创建的对象

我不是C++程序员,我非常尊重它的复杂性,所以我通常会远离它.尽管如此,我还是找到了一个我想修补的图书馆.

该库包含一个示例代码段,其中单个实例在本地范围内分配:

    Foo foo(arg1, arg2, ...);
Run Code Online (Sandbox Code Playgroud)

我想修改这个例子来重新初始化对象并用它做更多的事情,但我不能通过getter/setter或公共变量来做.如果没有创建更多实例,这可能吗?

如果没有创建新实例就无法做到这一点,我怎么能释放我不再需要的对象的内存?

例如,如果它是一个动态对象,我猜它会是这样的:

    Foo* pfoo;

    pfoo = new Foo(arg1, arg2, ...);
    pfoo->doSomething();
    delete pfoo;

    pfoo = new Foo(arg3, arg4, ...);
    pfoo->doSomething();
    delete pfoo;
Run Code Online (Sandbox Code Playgroud)

堆栈中分配的对象的等价物是什么?

c++ stack constructor object

2
推荐指数
1
解决办法
1270
查看次数

ionic:ngFor数组更改后不会自动更新

离子新手在这里。我正在使用Ionic 3和BLE插件。该插件的工作方式是,您开始扫描Bluetooth设备,并收到每个新的扫描结果的通知,然后在完成后取消扫描。我只是想在ion-list每次接收到新的扫描结果时将元素附加到。

这个Cordova插件使用了回音,这些回音将离子包装到Observables和Promises中。该方法startScan返回Observable<any>,并且“ any”是一个对象,其中包含有关检测到的BLE设备的信息。

我首先尝试将此可观察对象直接插入ngFor中:

<ion-list>
    <button ion-item *ngFor="let result of results | async">
        {{ result | json}}
    </button>  
</ion-list>
Run Code Online (Sandbox Code Playgroud)

调用开始扫描返回了可观察到的结果:

this.results = this.ble.startScan([]);
this.results.subscribe(...);
Run Code Online (Sandbox Code Playgroud)

但是我听说这ngFor仅适用于数组,因此它需要一个Observable<Array>而不是单个对象的可观察对象。因此,我放弃了Observable并改为使用数组。异步管道不再起作用,所以我不得不修改列表:

<ion-list>
    <button ion-item *ngFor="let result of results">
        {{ result | json}}
    </button>  
</ion-list>
Run Code Online (Sandbox Code Playgroud)

然后将的类型更改resultsArray<any>。现在,扫描代码如下所示:

this.ble.startScan([])
.subscribe(device => {
    this.results.push(device); //Does not work    
});
Run Code Online (Sandbox Code Playgroud)

但是,直到屏幕上的某些其他组件发生更改,列表才会显示。显然,Angular不会检测到Array元素内部的更改,它仅检测到对象内引用和属性的更改。因此,我尝试了这种无效的技巧:

this.ble.startScan([])
.subscribe(device => {
    this.results = this.results.concat([device]); //Does not work    
});
Run Code Online (Sandbox Code Playgroud)

但是,即使那样也没有用。然后,经过几个小时的阅读,我知道了这个所谓的东西ChangeDetector应该可以解决问题。我尝试了OnPush检测策略,并且默认设置也无效:

this.ble.startScan([])
.subscribe(device …
Run Code Online (Sandbox Code Playgroud)

ionic-framework ngfor ionic3 angular

2
推荐指数
1
解决办法
4961
查看次数

FragmentManager.findFragmentByTag返回null

我正在使用Android支持库(v4)和ActionBarSherlock.我正在尝试以编程方式关闭进度对话框.我编写了一个小实用程序类来帮助对话管理.

该对话框显示为AsyncTask.onPreExecute.它会正确显示.然后我通过旋转设备来触发配置更改,这会破坏活动(onDestroy调用AsyncTask.cancel(true)).AsyncTask.onCancelled被调用,并且在我尝试关闭对话框的方法中.但没有任何反应.以下是显示和关闭对话框的辅助函数:

    public abstract class DialogHelperActivity extends SherlockFragmentActivity {

        protected void showProgressDialog(final String msg, final String tag){      
            FragmentTransaction ft = this.getSupportFragmentManager().beginTransaction();
            DialogFragment dialogFragment = ProgressDialogFragment.newInstance(msg);

            ft.add(dialogFragment, tag);
            ft.disallowAddToBackStack();
            ft.commitAllowingStateLoss(); //If I try with regular commit(), exceptions are thrown.
        }

        protected void closeDialog(final String tag){
            FragmentManager fm = this.getSupportFragmentManager();
            Fragment dialogFragment = fm.findFragmentByTag(tag);        

            if(dialogFragment != null){
                FragmentTransaction ft = fm.beginTransaction();
                ft.remove(dialogFragment);
                ft.commitAllowingStateLoss();
            } else {
                System.err.println("dialog not found!"); //This line is hit always
            }               
        } …
Run Code Online (Sandbox Code Playgroud)

android progressdialog android-fragments actionbarsherlock android-support-library

1
推荐指数
1
解决办法
5679
查看次数

如何使用 Kotlin 协程最小化 Web 服务调用次数?

在我的 Android Kotlin 项目中,我在协程中调用了一个 webservice(myWebservice只是一个管理 webservice 调用的自定义类):

fun searchForItems(userInput: String)
{
    CoroutineScope(Dispatchers.IO + Job()).launch {
        val listOfItems = myWebService.call(userInput)
    }
}
Run Code Online (Sandbox Code Playgroud)

每次用户在一个字符中键入一个字符时都会调用该方法 EditText,因此该应用程序会调用 Web 服务,该服务会返回与其请求匹配的项目列表。但我想优化它。

假设用户键入单词:“apple”。为了尽量减少 webservice 调用的次数,这是我想要实现的:

  • 当用户输入第一个字母 (a) 时,webservice 被调用
  • 当用户键入下一个字母时,只要第一个调用没有返回,就没有新的 webservice 调用(假设他有足够的时间键入下一个字母 (pple))
  • 当第一个 webservice 调用完成时,新的调用会自动完成,新的用户输入(苹果)

实现这一目标的最佳实践是什么?或者有没有更好的方法来减少网络服务调用的次数?

谢谢。

android kotlin debouncing kotlin-coroutines

1
推荐指数
1
解决办法
647
查看次数

具有现代世界现代特征的编译编程语言示例[请投票重新打开]

除了C,C++,Delphi,VB之外,你能举一个相对"现代"的COMPILED*编程语言*的例子来支持像OO,集合,GUI库这样的东西吗?请不要提及实验或学术语言,我正在寻找现实世界中使用的东西,PC 80x86,我不介意操作系统.

谢谢!

*更新:编译为本机代码.

*免责声明:

  • 对于语言理解语言实现.
  • 对于编译到本机代码,理解不解释.

programming-languages compiled

0
推荐指数
1
解决办法
3728
查看次数

Kotlin:为什么你可以在 promise 列表上调用 awaitAll?

让我们看看这段代码:

import kotlinx.coroutines.*

fun main() = runBlocking {
    val deferreds: List<Deferred<Int>> = (1..3).map {
        async {
            delay(50L * it)
            it
        }
    }
    val sum = awaitAll(deferreds[0], deferreds[1], deferreds[2]).sum()
    println("$sum")
}
Run Code Online (Sandbox Code Playgroud)

上面我们awaitAll用可变参数调用。这是源代码的awaitAll样子:

public suspend fun <T> awaitAll(vararg deferreds: Deferred<T>): List<T> =
    if (deferreds.isEmpty()) emptyList() else AwaitAll(deferreds).await()
Run Code Online (Sandbox Code Playgroud)

但显然我们也可以调用awaitAllPromise 列表:

import kotlinx.coroutines.*

fun main() = runBlocking {
    val deferreds: List<Deferred<Int>> = (1..3).map {
        async {
            delay(50L * it)
            it
        }
    }
    val sum2 = deferreds.awaitAll().sum()
    println("$sum2") …
Run Code Online (Sandbox Code Playgroud)

kotlin kotlin-coroutines

0
推荐指数
1
解决办法
779
查看次数