小编Mar*_*ues的帖子

查看外部边界未正确绘制

点击自定义条形图(使用MPAndroidChart创建)后,我正在绘制工具提示.视图层次结构如下

<LinearLayout>
     <TextView text=Move & Max Pain/>
     <RelativeLayout with 2 textviews>
     <chart
       clipToChildren=false
       clipToPadding=false
     />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

虽然View位于Chart或其中间兄弟中,但外观看起来很好.但是当它与它的兄弟碰撞时,工具提示被截断了

在此输入图像描述

使用HierarchyViewer我可以看到内容存在,但它没有被绘制.

为了获得剪辑,我在draw中使用了这个代码

    @Override
  public void draw(Canvas canvas, float posx, float posy) {
    // take offsets into consideration
    posx += getXOffset();
    posy += getYOffset();

    canvas.save();

    // translate to the correct position and draw
    canvas.translate(posx, posy);

    Rect clipBounds = canvas.getClipBounds();
    clipBounds.inset(0, -getHeight());
    canvas.clipRect(clipBounds, Region.Op.INTERSECT);

    draw(canvas);
    canvas.translate(-posx, -posy);

    canvas.restore();
  }
Run Code Online (Sandbox Code Playgroud)

如果我将Op更改为Region.Op.Replace,则工具提示会正确绘制,但它会替换工具栏内容,而不是在其下滚动.

在此输入图像描述

android android-custom-view android-canvas mpandroidchart

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

buildConfigField取决于flavor + buildType

我试图定义一个buildConfigVariable取决于香精 + buildType.理想情况下,这就是我想要的

productFlavors {
    strawberry {
        buildConfigField "String", "WS_API_KEY", name + variant.buildType.name
    }
    ... more flavors ..
}
Run Code Online (Sandbox Code Playgroud)

name确实包含"strawberry",但我不知道是否可以访问variantbuildType.

放置在Android闭包之外我可以访问BuildType变体,但后来我无法调用buildConfigField

android.applicationVariants.all { variant ->
    println "****************************"
    println "variant: ${variant.name}"
    println "flavor: ${variant.flavorName}"
    println "****************************"

    if (variant.buildType.name == 'release') {
        if (variant.flavorName == 'strawberry') {
            buildConfigField "String", "WS_API_KEY", '"strawberry_release"'
        } else {
            buildConfigField "String", "WS_API_KEY", '"chocolate_release"'
        }
    } else if(variant.buildType.name == 'debug') {
        if …
Run Code Online (Sandbox Code Playgroud)

android android-gradle-plugin android-productflavors

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

亚行没有检测到中兴V9

我花了一个多小时试图让UB在Ubuntu 11.04上检测到我的中兴V9 .这不是权限问题,adb设备根本不打印任何内容

List of devices attached
Run Code Online (Sandbox Code Playgroud)

USB调试已开启

这就是我的android规则的样子

/etc/udev/rules.d/51-android.rules

SUBSYSTEM=="usb", ATTRS{idVendor}=="19d2:0083" SYMLINK+="android_adb", MODE="0666" GROUP="plugdev" TEST=="/var/run/ConsoleKit/database", \ RUN+="udev-acl --action=$env{action} --device=$env{DEVNAME}"
Run Code Online (Sandbox Code Playgroud)

这是lsusb的输出

Bus 002 Device 008: ID 19d2:0083 ONDA Communication S.p.A. 
Bus 002 Device 004: ID 046d:c01e Logitech, Inc. MX518 Optical Mouse
...
Run Code Online (Sandbox Code Playgroud)

编辑android.rules后,我重新启动了udev并重新启动了adb.

我已尝试过对此udev规则的几处修改.我也尝试使用99-android.rules而不是51,但没有任何改变.

然后,我尝试手动编辑./android/adb_usb.ini,在我的编辑后看起来像这样

# ANDROID 3RD PARTY USB VENDOR ID LIST -- DO NOT EDIT.
# USE 'android update adb' TO GENERATE.
# 1 USB VENDOR ID PER LINE.
0x19d2
Run Code Online (Sandbox Code Playgroud)

但是,仍然没有检测到该设备.

到目前为止,我已经开发出三星Galaxy …

debugging android adb

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

assembleRelease任务依赖 - 请求密钥库密码

为了避免以纯文本形式写入密钥库密码,我正在尝试为android Gradle插件创建的assembleRelease任务添加依赖项.

我已经检查了Gradle文档操作现有任务但我无法将依赖项放在应该的位置

这是我的任务,在android插件上方的$ root $/myApp/build.gradle中定义.

task readPasswordFromInput << {
    def console = System.console()

    ext.keystorePassword = console.readLine('\n\n\n> Enter keystore password: ')
}

apply plugin: 'android'
Run Code Online (Sandbox Code Playgroud)

然后,我尝试了Gradle提供的两种可能性:task.dependsOntask.doFirst,但没有一种可行.后者似乎被忽略了,而dependsOn确实添加了依赖,但在依赖链中却来得太晚了.运行./gradlew任务 - 都会打印出来

:assembleRelease - Assembles all Release builds [libs:ActionBarSherlock:bundleRelease, libs:DataDroid:bundleRelease, libs:SlidingMenu:bundleRelease]
    :compileRelease
    ...
    [SEVERAL TASKS]
    ...
    :packageRelease
    ...
    [SEVERAL TASKS]
    ...
    :readPasswordFromInput
Run Code Online (Sandbox Code Playgroud)

问题是,任务packageRelease中需要密钥库密码

正如旁注,这是我想要的

buildTypes {
        release {
            def console = System.console()

            ext.keystorePassword = console.readLine('\n\n\n> IF …
Run Code Online (Sandbox Code Playgroud)

android gradle

12
推荐指数
3
解决办法
9685
查看次数

用Robolectric模拟HttpResponse

使用Robolectric 2.3-SNAPSHOT,我想测试一个在后台执行请求的对象.为了隔离它,我试图模拟返回的HttpResponse,在投入几个小时后没有成功.

我创建了一个任何人都可以克隆的项目.模拟运行./gradlew检查 https://github.com/Maragues/RobolectricDummyProject(git clone https://github.com/Maragues/RobolectricDummyProject.git)

我试过了

但测试失败是因为他们查询真实的URL

  private static final String MOCKED_WORD = "MOCKED";

  @Test
  public void mockedRequestUsingMockServer() throws Exception {
    mMockWebServer.enqueue(new MockResponse().setBody(MOCKED_WORD));
    mMockWebServer.play();

    Robolectric.getFakeHttpLayer().interceptHttpRequests(false);
    Robolectric.getFakeHttpLayer().interceptResponseContent(false);

    String result = request.loadDataFromNetwork();

    assertEquals(MOCKED_WORD, result);
  }

  @Test
  public void mockedRequestUsingRobolectric() throws Exception {
    Robolectric.setDefaultHttpResponse(200, MOCKED_WORD);

    String result = request.loadDataFromNetwork();

    assertEquals(MOCKED_WORD, result);
  }
Run Code Online (Sandbox Code Playgroud)

执行请求的代码

public String loadDataFromNetwork() throws Exception {
    // With Uri.Builder class we can build our url is a safe manner
    Uri.Builder uriBuilder = Uri.parse("http://robospice-sample.appspot.com/reverse").buildUpon(); …
Run Code Online (Sandbox Code Playgroud)

android robolectric mockwebserver

11
推荐指数
2
解决办法
5926
查看次数

Crouton + SlidingMenu重叠

我正在使用SlidingMenuCrouton,但我发现滑动菜单与crouton通知重叠

烤面包片和滑动菜单重叠

我会在github中报告一个问题,但我不知道bug在哪里.

Cyril Mottier在他的Prix​​ing文章中提到了布局通知存在3个上下文,左侧菜单本身就有一个上下文.这样,通知就会与其他内容一起滑动.

在此输入图像描述

因为SlidingMenu和Crouton都使用Activity Context,也许这根本不可修复.我们可以轻松打电话

Crouton.cancelAllCroutons();
Run Code Online (Sandbox Code Playgroud)

在显示SlidingMenu之前,我喜欢Prixing的滑出功能.

希望图书馆的作者可以声称这个错误或对它有所了解.

谢谢!

编辑:

我通过创建对象并将其附加到活动来使用SlidingMenu

private void configureSideMenu() {
   mSlidingMenu = new SlidingMenu(this);
   mSlidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
   mSlidingMenu.setFadeDegree(0.35f);
   mSlidingMenu.attachToActivity(this, SlidingMenu.SLIDING_CONTENT);
   mSlidingMenu.setBehindOffsetRes(R.dimen.slidingmenu_offset);
   mSlidingMenu.setMenu(R.layout.menu_frame);
   getSupportFragmentManager().beginTransaction().replace(R.id.menu_frame, new MySideMenuFragment()).commit();
 }
Run Code Online (Sandbox Code Playgroud)

而Crouton,我想只有一种方法可以使用它

  Crouton.showText(this, R.string.error_not_logged_in, Style.ALERT);
Run Code Online (Sandbox Code Playgroud)

是这两种情况下相同的活动

android slidingmenu crouton

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

使用Ant转换为dex时的ZipException,在eclipse中它可以正常工作

我有一个在Eclipse中构建好的项目,但在执行"ant debug"时会抛出ZipException.输出如下(路径和项目名称除外)

    -dex:
      [dex] Converting compiled files and external libraries into /home/.../Android/[folder]/bin/classes.dex...
       [dx] 
       [dx] UNEXPECTED TOP-LEVEL EXCEPTION:
       [dx] java.util.zip.ZipException: error in opening zip file
       [dx]     at java.util.zip.ZipFile.open(Native Method)
       [dx]     at java.util.zip.ZipFile.<init>(ZipFile.java:131)
       [dx]     at java.util.zip.ZipFile.<init>(ZipFile.java:148)
       [dx]     at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:206)
       [dx]     at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:131)
       [dx]     at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:109)
       [dx]     at com.android.dx.command.dexer.Main.processOne(Main.java:418)
       [dx]     at com.android.dx.command.dexer.Main.processAllFiles(Main.java:329)
       [dx]     at com.android.dx.command.dexer.Main.run(Main.java:206)
       [dx]     at com.android.dx.command.dexer.Main.main(Main.java:174)
       [dx]     at com.android.dx.command.Main.main(Main.java:95)
       [dx] 1 error; aborting

BUILD FAILED
/home/.../android-sdk-linux_x86/tools/ant/build.xml:818: The following error occurred while executing this line:
/home/.../android-sdk-linux_x86/tools/ant/build.xml:820: The following error occurred while executing …
Run Code Online (Sandbox Code Playgroud)

ant android dex

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

调整大小后布局视图

我正在创建一个显示经常变化的值的网格.因此,我正在使用TextView,当其内容发生变化时自动调整(自动缩放TextView Text以适应Bounds内).调整大小发生,但视图布局不正确

调整大小后的布局

问题是,当我使用HierarchyViewer检查活动时,布局会显示我想要的内容.

层次结构视图后的布局

我的猜测是HierarchyViewer在视图上调用requestLayout()或invalidate(),但我已经尝试过但没有成功.此代码在主活动中调用,但不起作用.

new Handler().postDelayed(new Runnable() {            
            @Override
            public void run() {
              getWindow().getDecorView().requestLayout();
              getWindow().getDecorView().invalidate();
            }
          }, 5000);
Run Code Online (Sandbox Code Playgroud)

我也尝试在调整大小后使视图无效.

TextView将重力设置为中心,如果没有调整大小,它看起来没问题.

任何提示都将受到欢迎,谢谢!

android hierarchyviewer

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

AccountPicker.newChooseAccountIntent,在选择帐户时关闭对话框

我正在尝试使用Google Play服务生成的意图来选择Google帐户

private void showGoogleAccountPicker() {
    Intent googlePicker = AccountPicker.newChooseAccountIntent(null, null,
        new String[] { GoogleAuthUtil.GOOGLE_ACCOUNT_TYPE }, true, null, null, null, null);
    startActivityForResult(googlePicker, PICK_ACCOUNT_REQUEST);
  }

  @Override
  protected void onActivityResult(final int requestCode, final int resultCode, final Intent data) {
    if (requestCode == PICK_ACCOUNT_REQUEST && resultCode == RESULT_OK) {
      String accountName = data.getStringExtra(AccountManager.KEY_ACCOUNT_NAME);
      Log.d(TAG, "Account Name=" + accountName);
    }
  }
Run Code Online (Sandbox Code Playgroud)

该对话框显示我的Google帐户以及创建新帐户的选项.

在此输入图像描述

如果我选择"添加帐户"选项,我已正确地重定向到帐户创建向导,但如果我选择现有帐户并单击"确定",则对话框将关闭,但它永远不会返回到活动

Logcat只打印此行.我认为它没有任何关系.

W/IInputConnectionWrapper(23576): showStatusIcon on inactive InputConnection
Run Code Online (Sandbox Code Playgroud)

来源

http://gmariotti.blogspot.com.es/2013/03/snippet-google-picker-account.html http://developer.android.com/reference/com/google/android/gms/common/AccountPicker.html

android google-play-services

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

Dagger + Proguard混淆,错误创建对象图

运行我的应用程序的模糊版本会引发以下堆栈跟踪

java.lang.RuntimeException: Unable to create service com.mycompany.myapp.async.alarms.AlarmIntentService: java.lang.IllegalStateException: Errors creating object graph:
    dagger.Lazy could not be bound with key dagger.Lazy required by dagger.Lazy  com.mycompany.scheduler.c.mNotificationDisplayer
Run Code Online (Sandbox Code Playgroud)

如果我添加-dontobfuscate,它会顺利运行

这是包含该字段的类

public abstract class AbstractAlarmSchedulerService extends IntentService {

  @Inject
  Lazy<AbstractAlarmSchedulerNotificationDisplayer> mNotificationDisplayer;
Run Code Online (Sandbox Code Playgroud)

我在我的应用程序中从这个类扩展,但它属于一个外部库.

这些是我的匕首计划规则,复制自/sf/answers/1272424401/

#Dagger
-keepattributes *Annotation*

-keepclassmembers,allowobfuscation class * {
    @javax.inject.* *;
    @dagger.* *;
    <init>();
}

-keep class * extends dagger.internal.Binding
-keep class * extends dagger.internal.ModuleAdapter

-keep class **$$ModuleAdapter
-keep class **$$InjectAdapter
-keep class **$$StaticInjection

-keep class dagger.* { *; }

-keep class javax.inject.* …
Run Code Online (Sandbox Code Playgroud)

android proguard dagger

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

图像不适合屏幕

我有一个320x480的图像,我想要适合整个屏幕.这是main.xml代码

<ImageView   xmlns:android="http://schemas.android.com/apk/res/android">
        android:id='@+id/splash_medium'

        android:layout_width="fill_parent" 
        android:layout_height="fill_parent" 

        android:src="@drawable/wallpaper320x480"
         />
Run Code Online (Sandbox Code Playgroud)

屏幕显示图像,但左侧和右侧有一个相当大的填充,顶部和底部有一点点填充.我已经尝试将android:padding设置为0dip但没有结果.

链接到图片,我还不能发布图片:截图

任何帮助,将不胜感激.

android imageview

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