Android: implements navbar set center

This commit is contained in:
王劲鹏 2020-04-30 14:53:29 +08:00 committed by osborn
parent d8649ac539
commit 007786f4ef
3 changed files with 56 additions and 9 deletions

View File

@ -15,14 +15,13 @@
*/ */
package pub.doric.navbar; package pub.doric.navbar;
import android.annotation.TargetApi;
import android.app.Activity; import android.app.Activity;
import android.content.Context; import android.content.Context;
import android.graphics.Color;
import android.os.Build; import android.os.Build;
import android.text.Layout; import android.text.Layout;
import android.text.StaticLayout; import android.text.StaticLayout;
import android.util.AttributeSet; import android.util.AttributeSet;
import android.view.Gravity;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
@ -34,10 +33,7 @@ import android.widget.TextView;
import androidx.annotation.AttrRes; import androidx.annotation.AttrRes;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.core.view.ViewCompat;
import com.qmuiteam.qmui.util.QMUIDeviceHelper;
import com.qmuiteam.qmui.util.QMUINotchHelper;
import com.qmuiteam.qmui.util.QMUIStatusBarHelper; import com.qmuiteam.qmui.util.QMUIStatusBarHelper;
import pub.doric.R; import pub.doric.R;
@ -131,6 +127,15 @@ public class BaseDoricNavBar extends FrameLayout implements IDoricNavBar {
mRightContainer.addView(view); mRightContainer.addView(view);
} }
@Override
public void setCenter(View view) {
mTitleContainer.removeAllViews();
mTitleContainer.addView(view);
FrameLayout.LayoutParams lp = (LayoutParams) view.getLayoutParams();
lp.gravity = Gravity.CENTER;
view.setLayoutParams(lp);
}
private void updateTitleMargins() { private void updateTitleMargins() {
try { try {
int width = mRightContainer.getRight() - mLeftContainer.getLeft(); int width = mRightContainer.getRight() - mLeftContainer.getLeft();

View File

@ -34,4 +34,6 @@ public interface IDoricNavBar {
void setLeft(View view); void setLeft(View view);
void setRight(View view); void setRight(View view);
void setCenter(View view);
} }

View File

@ -15,12 +15,8 @@
*/ */
package pub.doric.plugin; package pub.doric.plugin;
import android.os.Build;
import android.view.WindowManager;
import android.widget.FrameLayout; import android.widget.FrameLayout;
import androidx.appcompat.app.AppCompatActivity;
import com.github.pengfeizhou.jscore.ArchiveException; import com.github.pengfeizhou.jscore.ArchiveException;
import com.github.pengfeizhou.jscore.JSDecoder; import com.github.pengfeizhou.jscore.JSDecoder;
import com.github.pengfeizhou.jscore.JSObject; import com.github.pengfeizhou.jscore.JSObject;
@ -47,6 +43,7 @@ public class NavBarPlugin extends DoricJavaPlugin {
private static final String TYPE_LEFT = "navbar_left"; private static final String TYPE_LEFT = "navbar_left";
private static final String TYPE_RIGHT = "navbar_right"; private static final String TYPE_RIGHT = "navbar_right";
private static final String TYPE_CENTER = "navbar_center";
public NavBarPlugin(DoricContext doricContext) { public NavBarPlugin(DoricContext doricContext) {
super(doricContext); super(doricContext);
@ -201,4 +198,47 @@ public class NavBarPlugin extends DoricJavaPlugin {
promise.reject(new JavaValue(e.getLocalizedMessage())); promise.reject(new JavaValue(e.getLocalizedMessage()));
} }
} }
@DoricMethod(thread = ThreadMode.UI)
public void setCenter(JSDecoder decoder, final DoricPromise promise) {
try {
final JSObject jsObject = decoder.decode().asObject();
getDoricContext().getDriver().asyncCall(new Callable<Object>() {
@Override
public Object call() throws Exception {
String viewId = jsObject.getProperty("id").asString().value();
String type = jsObject.getProperty("type").asString().value();
ViewNode node = ViewNode.create(getDoricContext(), type);
node.setId(viewId);
node.init(new FrameLayout.LayoutParams(0, 0));
node.blend(jsObject.getProperty("props").asObject());
getDoricContext().getDoricNavBar().setCenter(node.getNodeView());
getDoricContext().clearHeadNodes(TYPE_CENTER);
getDoricContext().addHeadNode(TYPE_CENTER, node);
return null;
}
}, ThreadMode.UI).setCallback(new AsyncResult.Callback<Object>() {
@Override
public void onResult(Object result) {
promise.resolve();
}
@Override
public void onError(Throwable t) {
t.printStackTrace();
promise.reject(new JavaValue(t.getLocalizedMessage()));
}
@Override
public void onFinish() {
}
});
} catch (Exception e) {
e.printStackTrace();
promise.reject(new JavaValue(e.getLocalizedMessage()));
}
}
} }