我正在我的项目中使用android AAC库和Android数据绑定库.我有AuthActivity和AuthViewModel扩展了android的ViewModel类.在某些情况下,我需要让Activity为ViewModel调用一些方法.例如,当用户点击Google Auth或Facebook Auth按钮时,它在Activity类中初始化(因为初始化GoogleApiClient我需要Activity上下文,我无法传递给ViewModel,视图模型无法存储Activity字段).在Activity类中实现了Google Api和Facebook API的所有逻辑:
//google api initialization
googleApiClient = new GoogleApiClient.Builder(this)
.enableAutoManage(this, this)
.addApi(Auth.GOOGLE_SIGN_IN_API, gso)
.build();
//facebook login button
loginButton.setReadPermissions(Arrays.asList("email", "public_profile"));
loginButton.registerCallback(callbackManager,
Run Code Online (Sandbox Code Playgroud)
此外,我需要调用登录意图,这也需要活动上下文:
Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(googleApiClient);
startActivityForResult(signInIntent, GOOGLE_AUTH);
Run Code Online (Sandbox Code Playgroud)
我不能请求facebook登录和google登录,或者从视图模型类请求startActivity intent,所以我创建了类接口AuthActivityListener:
public interface AuthActivityListener {
void requestSignedIn();
void requestGoogleAuth();
void requestFacebookAuth();
void requestShowDialogFragment(int type);
}
Run Code Online (Sandbox Code Playgroud)
在活动类中实现监听器:
AuthActivityRequester authRequestListener = new AuthActivityRequester() {
@Override
public void requestSignedIn() {
Intent intent = new Intent(AuthActivity.this, ScanActivity.class);
startActivity(intent);
AuthActivity.this.finish();
}
@Override
public void requestGoogleAuth() {
Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(googleApiClient);
startActivityForResult(signInIntent, GOOGLE_AUTH);
} …Run Code Online (Sandbox Code Playgroud) 我正在使用 jest+nock+jsdom 模块来测试我的 React\Redux 应用程序。我需要测试这个异步操作函数:
export function updateUserPhoto (file, token) {
const data = new FormData()
data.append('file', file)
return dispatch => {
dispatch(userPutPhotoRequest())
return axios({
method: 'PUT',
headers: {
'x-access-token': token
},
data: data,
url: API_URL + '/user/photo'
})
.then(res => dispatch(userPutPhotoSuccess(res.data)))
.catch(err => dispatch(userPutPhotoFilure(err)))
}
}
Run Code Online (Sandbox Code Playgroud)
所以我使用 jsdom 向测试提供 FormData 和 File 对象:
const {JSDOM} = require('jsdom')
const jsdom = (new JSDOM(''))
global.window = jsdom.window
global.document = jsdom.window.document
global.FormData = jsdom.window.FormData
const File = jsdom.window.File
global.File = jsdom.window.File
Run Code Online (Sandbox Code Playgroud)
这是测试“上传照片”功能的方法: …
我需要在我的按钮上添加模糊的阴影:
我尝试使用layer-list xml drawable创建背景,但它看起来不像模糊.
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Drop Shadow Stack -->
<item>
<shape>
<corners android:radius="45dp" />
<padding
android:bottom="2dp"
android:left="1dp"
android:right="1dp"
android:top="1dp" />
<stroke
android:width="6dp"
android:color="#007879E8" />
</shape>
</item>
////// 10 more items
<item>
<shape>
<corners android:radius="45dp" />
<padding
android:bottom="2dp"
android:left="1dp"
android:right="1dp"
android:top="1dp" />
<stroke
android:width="6dp"
android:color="#177879E8" />
</shape>
</item>
<!-- Background -->
<item>
<shape>
<corners android:radius="45dp" />
<stroke
android:width="2dp"
android:color="@color/main_purple_text_color" />
</shape>
</item>
</layer-list>
Run Code Online (Sandbox Code Playgroud)
此外,我试图使用背景元素隐藏按钮与blured png但它使用了很多资源,我不能创建选择器来改变悬停或点击背景.
我需要为按钮设置单个背景文件,并使用选择器在悬停/单击时更改模糊和渐变.有任何想法如何用Android SDK实现这样的效果?
更新1
谢谢大家的答案,但我不是在问如何创建渐变.我已经这样做了.我需要创建模糊的阴影.
我有带有自定义背景可绘制的 EditText:
编辑文本代码:
<EditText
android:id="@+id/etName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@{ViewModel.isAllowEdit ? @drawable/profile_et_background_active : @drawable/profile_et_background}"
android:inputType="@{ViewModel.isAllowEdit ? InputType.TYPE_CLASS_TEXT : InputType.TYPE_NULL}"
android:text="@={ViewModel.name}"
android:textColor="@color/main_dark_text_color" />
Run Code Online (Sandbox Code Playgroud)
我正在使用 android 数据绑定库和 MVVM 架构。
如果 ViewModel 的 isAllowEdit 设置为 true,则 EditText 背景设置为 @drawable/profile_et_background_active。
如果 isAllowEdit false EditText 将背景设置为@drawable/profile_et_background。
此外,我不允许通过将 inputType 设置为 TYPE_NULL 进行编辑,并通过将 inputType 设置为 TYPE_CLASS_TEXT 来允许进行编辑。
@drawable/profile_et_background_active 代码:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle">
<solid android:color="@android:color/transparent" />
</shape>
</item>
<item
android:left="-2dp"
android:right="-2dp"
android:top="-2dp">
<shape>
<solid android:color="@android:color/transparent" />
<stroke
android:width="1dp"
android:color="@color/main_elements_line_color" />
</shape>
</item>
</layer-list>
Run Code Online (Sandbox Code Playgroud)
@drawable/profile_et_background 代码:
<item>
<shape android:shape="rectangle"> …Run Code Online (Sandbox Code Playgroud) 我正在使用 Koa 和 Typescript 编写网络应用程序。在 vscode 中,我遇到了不需要的代码格式:当我使用对象解析方法声明变量时,vscode 在多行中自动格式化它:
deleteUser: async (ctx: Context) => {
const {
body: { userId }
} = ctx;
await userService.deleteUser(userId);
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我希望它保留在一行中:
deleteUser: async (ctx: Context) => {
const { body: { userId } } = ctx;
await userService.deleteUser(userId);
}
Run Code Online (Sandbox Code Playgroud)
我喜欢 vscode 处理我的代码格式的方式,所以我不想禁用它。但我想找到一种解决方法,如果行长度小于 80 个字符,则禁用对象解构格式。
我应该使用什么规则来解决这个问题?我应该更改 vscode 规则还是 tslint 规则?
这是我的 .tslint 文件:
{
"rules": {
"class-name": true,
"comment-format": [true, "check-space"],
"indent": ["tabs"],
"one-line": [true, "check-open-brace", "check-whitespace"],
"no-var-keyword": true,
"quotemark": [true, "double", "avoid-escape"],
"semicolon": [true, …Run Code Online (Sandbox Code Playgroud) formatting object-destruction typescript tslint visual-studio-code
android ×3
axios ×1
blur ×1
dropshadow ×1
form-data ×1
formatting ×1
gradient ×1
jestjs ×1
listener ×1
mvvm ×1
reactjs ×1
redux ×1
tslint ×1
typescript ×1
viewmodel ×1