小编CBA*_*110的帖子

Android - 如何获得Flavor的ApplicationId

我正在构建一个具有不同构建变体风格的应用程序.口味是"免费"和"付费".我想在我的java类上创建一些逻辑,只有在应用程序为"付费"时才会触发.因此,我需要一种方法来在gradle构建过程中设置"applicationId",如下所示:

gradle.build

    productFlavors {
    free {
        applicationId "com.example.free"
        resValue "string", "app_name", "Free App"
        versionName "1.0-free"
    }
    paid {
        applicationId "com.example.paid"
        resValue "string", "app_name", "Paid App"
        versionName "1.0-paid"
    }
Run Code Online (Sandbox Code Playgroud)

一旦我有了应用程序ID,我就可以这样做:

    if(whateverpackageid.equals("paid")) {
      // Do something or trigger some premium functionality.
    } 
Run Code Online (Sandbox Code Playgroud)

我是否正确地说,在gradle构建过程中,"applicationId"最终会在应用程序编译后成为"包名"?如果是这样,获得"应用程序ID"或"包名称"的最佳方法是什么,以便我可以在我的java文件中实现一些与味道相关的逻辑?

android gradle android-productflavors

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

如何在Android中将标记设置为片段

我已经查看了Stackoverflow上的所有问题,但无法找到这个问题的唯一确定答案.如何将标记设置为aFragment以便通过它检索getFragmentManager().findFragmentByTag()?有人可以给出一个如何创建标签的简单代码示例Fragment吗?

android android-fragments fragmentmanager

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

Android - 从Flavor中删除活动

如何从app风格中删除活动?这是一个简化的例子,我有一个应用程序,它有以下两种口味(付费和免费).该应用程序很小,只有3个活动(MainActivity,ActivityOne和ActivityTwo).付费应用程序不需要任何限制,因为它将使用完整的代码库.然而,免费应用程序要求用户可以访问MainActivity和ActivityTwo,而不是ActivityOne.如何在编译代码时执行"Manifest Merge",以便免费版本中不存在ActivityOne?换句话说,应该如何创建src/free/AndroidManifest.xml以使免费应用程序没有ActivityOne?

下面是app 的build.gradle文件:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 21
    buildToolsVersion "21.1.2"

    defaultConfig {
        applicationId "com.example.calculator"
        minSdkVersion 21
        targetSdkVersion 21
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    productFlavors {
        paid {
            applicationId "com.example.paid"
            resValue "string", "app_name", "Paid Calculator"
            versionName "1.0-full"
        }
        free {
            applicationId "com.example.free"
            resValue "string", "app_name", "Free Calculator"
            versionName "1.0-free"
        }
    }
    sourceSets {
        paid {
            manifest.srcFile 'src/paid/AndroidManifest.xml'
        }
        free {
            manifest.srcFile 'src/free/AndroidManifest.xml'
        } …
Run Code Online (Sandbox Code Playgroud)

android android-activity android-gradle-plugin android-productflavors

8
推荐指数
2
解决办法
2453
查看次数

旋转时重复的ActionBar按钮

我试图找到一个答案,但没有运气.我有一个片段,有一个名为'menu_roi_result_calc'的菜单项.每次屏幕旋转时,都会创建一个新菜单项.代码如下所示:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_roi_result_calc, menu);
    return true;
}
Run Code Online (Sandbox Code Playgroud)

然而,在几次屏幕旋转后,这就是我得到的:

多个操作栏菜单项

我感觉这是因为每次旋转都会重新创建菜单项,因此每次旋转时都会添加一个新项目.我如何让它停下来?如何检查项目是否存在并防止再次重新创建项目?任何代码示例将不胜感激.

android android-menu android-actionbar

6
推荐指数
2
解决办法
1341
查看次数

片段和DialogFragment生命周期关系

我在适当的位置有Fragment“ A” ImageButton。单击此按钮后,将DialogFragment调用“ B”到前景,其中Fragment“ A”在背景中部分可见。DialogFragment“ B”为用户提供选择列表。单击特定选项后,DialogFragment“ B”将通过消失Dismiss()Fragment“ A”再次变得完全可见。

在这个动作我需要更新ImageButtonFragment“A”来表示用户的选择上进行DialogFragment“B”(基本上是一个新的形象的ImageButton)。

我认为在更新ImageButton片段“ A” 的正确位置期间正确OnResume吗?确实片段“A”进入OnPause,同时FragmentDialog正在显示“B”?因此,从DialogFragment“ B” 返回时,Fragment“ A”将触发它OnResume,这就是我应该对ImageButton呈现给用户的更新进行更改的地方?

希望我的解释清楚。任何关于我应该在哪里以及如何更新的详细帮助,ImageButton将不胜感激。

android android-lifecycle android-fragments android-dialogfragment

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

Android MipMap - 如何在 XML 中创建图像资源

我已经注意到 Android Studio 在项目目录中有“mipmap”文件夹。据我了解,为了确保所有设备上的图像资源(应用内图标)保持一致,我们应该拥有 XML 格式的图像资源,如下所示:

    <!-- drawable/numeric-1-box.xml -->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="24dp"
    android:height="24dp"
    android:viewportHeight="24"
    android:viewportWidth="24">
    <path
        android:fillColor="#757575"
        android:pathData="M14,17H12V9H10V7H14M19,3H5A2,2 0 0,0 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5A2,2 0 0,0 19,3Z" />
</vector>
Run Code Online (Sandbox Code Playgroud)

我一直在使用Material Design Icons网站来获取 XML 格式的大部分常规图标。但是,我该如何创建这样的图标呢?到目前为止,我一直从上面显示的网站下载它们。有没有可以用来将图像导出为这些格式 (XML) 的工具?这样做的程序是什么?Photoshop、Illustrator 或其他图像转换网络工具?任何有关如何创建这些图像的帮助将不胜感激。

xml android drawable mipmaps

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

Android-实现可包裹内部类

我知道如何使用公共变量实现简单的Parcelable类,但是下面的类要复杂一些。鉴于此类具有内部类和ListEntity,如何实现Parcelable接口?我什至不知道如何开始。任何有关如何执行此操作的详细信息将不胜感激。

import android.os.Parcel;
import android.os.Parcelable;

import java.util.List;

public class ResponsePlaceSearch implements Parcelable {

    // *** Parcelable methods are shown below (Begin) ***

    protected ResponsePlaceSearch(Parcel in) {
    }

    public static final Creator<ResponsePlaceSearch> CREATOR = new Creator<ResponsePlaceSearch>() {
        @Override
        public ResponsePlaceSearch createFromParcel(Parcel in) {
            return new ResponsePlaceSearch(in);
        }

        @Override
        public ResponsePlaceSearch[] newArray(int size) {
            return new ResponsePlaceSearch[size];
        }
    };

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {

    }

    // *** (End) ***


    private List<ListEntity> …
Run Code Online (Sandbox Code Playgroud)

android inner-classes parcelable

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