根据buildtype预填充EditText

时间:2017-08-30 07:45:59

标签: android android-build-type

是否可以仅在EditText中为某个构建类型设置文本? 我想在运行调试构建类型时预先填充应用程序中的EditText。 我现在看到的唯一方法是通过编程方式检查当前构建类型的当前是否为" debug"并致电setText()

我希望能够以更清洁的方式做到这一点。也许类似于XML布局中的tools命名空间。 有什么建议吗?

3 个答案:

答案 0 :(得分:2)

您可以在SELECT COUNT(sr.id) AS total, COUNT(sr.id) FILTER (where (raw #>> '{survey, declined}' IS NULL) OR (raw #>> '{survey, declined}' = 'false')) AS completed, COUNT(sr.id) FILTER (WHERE (raw #>> '{survey, declined}' = 'true')) AS denied FROM survey_results sr LEFT JOIN clients c ON c.id = sr.client_id LEFT JOIN facilities f ON f.client_id = c.id WHERE (sr.created_at >= '2005-07-01T08:00:00+00:00' AND sr.created_at <= '2005-08-02T07:59:59+00:00' AND 4 IS NULL) OR (sr.client_id = 4 AND NULL IS NULL OR f.id = NULL) ;

build.gradel文件中为不同的环境添加一些文字
buildTypes

然后在活动中直接将其设置为您的edittext而无需手动检查任何内容。

//For Development Environment
buildConfigField "String", "text", "\"DEVELOPMENT ENVIRONMENT TEXT\""

//For Live Environment leave it empty
buildConfigField "String", "text", "\"\""

更首选的解决方案(对于直接XML)

而不是etValue.setText(BuildConfig.text); 使用buildConfigField,这会在项目重建时为不同的环境生成resValue

String Resource

你可以直接在xml中使用它

//For Live Environment leave it empty
resValue "string", "text", YOUR_STRING_LIVE

//For Development Environment
resValue "string", "text", YOUR_STRING_DEVELOPMENT

答案 1 :(得分:0)

另一个解决方案是在src文件夹下创建调试和发布文件夹,并在调试版和发行版之间保留所有公共资源的不同值。所以你将拥有:

  

\ SRC \释放\ RES \值\ strings.xml中

  <string name="your_string">release_value_here</string>

  

\ SRC \调试\ RES \值\ strings.xml中

  <string name="your_string">debug_value_here</string>

然后是XML

android:text="@string/your_string"

答案 2 :(得分:0)

最终我按照自己的方式保持清洁。 我已经看过面向方面编程,并用AspectJ做了一个Aspect。

for entry in corIter(data) do
  print(entry) -- this is a table
  for k,v in pairs(entry) do
    print(k,v) -- these are the actual values
  end
end

我已将此方面添加到我的@Aspect class PrefillAspect { @After("execution(* com.example.aspect.LoginActivity.onCreate(*))") fun prefillLoginForm(joinPoint: JoinPoint) { try { val activity = joinPoint.target as LoginActivity activity.findViewById<EditText>(R.id.editEmail).setText("test@example.com") activity.findViewById<EditText>(R.id.editPassword).setText("MySecretPassword") } catch (e: Throwable) { Log.e("PrefillAspect", "prefillLoginForm: failed") } } } 文件夹中,因此仅在运行调试版本时应用此方面。在我的主要来源中没有任何代码,所以这将永远不会发货,代码库仍然是干净的。

我在这里写了一篇关于此的文章:https://medium.com/@dumazy/prefill-forms-on-android-with-aspectj-97fe9b3b48ab