android图形界面UI详解

【Android GUI】从总体上了解Android的GUI体系 Android的HAL层提供了Gralloc,包括fb和gralloc两个设备。VSync是“Project Butter”加入的同步机制,可以通过硬件产生,也可以通过软件,即VSyncThread模拟。Framebuffer是内核系统提供的图形硬件的抽象描述,它占用了系统存储空间的一部分,是一块包含屏幕显示信息的缓冲区。Gralloc对应的模块是由FramebufferNativeWindow在构造函数中加载的。Android中,Framebuffer提供的设备文件节点是。 阅读详情

图形用户界面(GUI)是Android应用程序开发不可或缺的一部分。其不仅能为用户提供输入,还能够根据(用户)执行的动作,提供相应的反馈。因此,作为开发人员,能够理解UI(用户界面)是如何创建以及跟新的,就显得尤为重要。

ViewTree

View 和 ViewGroup 是Android UI的基本组件, 而ViewGroup作为容器,可以包含一组View, 并且ViewGroup其本身就是View的扩展。看源码:

public abstract class ViewGroup extends View implements ViewParent, ViewManager{} 

而各种不同的Widgets 像TextView, Button 等等 也是View的扩展,只不过是放在各种Layout里,比如LinearLayout, RelativeLayout。而Layout却是ViewGroup的子类。所以说一个ViewTree只不过是各种Views和ViewGroups放在一个Layout里组成的树形结构。

有例子才有真相。通过Eclipse的Outline窗口,我们可以看下下面这个树状布局。

 XML Code:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/RelativeLayout1"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >
 
    <View
        android:id="@+id/WhiteView"
        android:layout_width="200dp"
        android:layout_height="300dp"
        android:layout_marginLeft="20dp"
        android:background="#ffffff" />
 
    <TextView
        android:id="@+id/RedText"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:text="@string/hello"
        android:textColor="#ff0000" />
 
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@+id/GrayView"
        android:layout_alignLeft="@+id/GrayView"
        android:layout_marginBottom="25dp"
        android:background="#0000ff"
        android:orientation="vertical" >
 
        <TextView
            android:id="@+id/GreenText"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="TextView"
            android:textColor="#00ff00"
            android:textStyle="bold" />
 
        <Button
            android:id="@+id/Button1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Button in LinearLayout" />
    </LinearLayout>
     
    <View
        android:id="@+id/RedView"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_alignParentRight="true"
        android:layout_above="@+id/GrayView"
        android:layout_marginRight="10dp"
        android:layout_marginBottom="-10dp"
        android:background="#ff0000" />
     
    <View
        android:id="@+id/GrayView"
        android:layout_width="200dp"
        android:layout_height="300dp"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:layout_marginRight="20dp"
        android:background="#cccccc" />
 
</RelativeLayout>

当我们在Activity里,用setContentView()去设置这个view,然后运行,我们可以看到如下图:

仔细观察XML文件,以及页面渲染的View,我们会发现:

1. ViewTree 是以一种自上而下的方式进行遍历实现。

2. Parent总是最先绘制的,其实才是Children,并且仍然遵循自上而下的方式。

所以在我们的例子中,RelativeLayout是最先绘制,接着是其孩子WhiteView,RedText 等等,

直到最终GrayView绘制,并且我们会看到后绘制的覆盖了部分先绘制的。

为了更方便观察这些Views是怎么绘制的,我们把手机屏幕看作下面的X,Y,Z的坐标系。屏幕的左上角作为[0,0,0],X轴向右,Y轴向下沿着屏幕的长度,Z轴延伸出屏幕。


 所以说,当我们遍历Tree的时候,这些Views基本上就是沿着Z轴排放。这里需要注意,当View有部分被遮挡时,Android就不会再绘制这被遮挡的部分。比如上图,灰色遮挡部分红色,Android绘图机制就不会再绘制那部分红色,所以我们看到的是直接遮挡,而不是颜色的混合。

现在我们知道了我们在XML里定义的Views是如何绘制的了,但是这还不够,我们可以借助一个非常有用的工具Heirarchyviewer去更深层细的观察页面布局。

Heirarchyviewer 在文件夹android-sdk/tools下,在命令行下找到这个文件夹,然后执行heirarchyviewer.bat 就可以了。

下图是Hierarchy Viewer的截图:

在Hierarchy Viewer里,列代表树的深度,而每一列里行的数量则表示每一层的深度。从图上我们能注意到RelativeLayout并不是Root级别的,而是id为content的FrameLayout的一个子元素。而实际山我们调用setContentView(View v)里的View v 就是这个content视图。

 现在注意下跟content同级的FrameLayout有个子TextView,实际上它既是Activity的titleBar。那么我们删除这个TitleBar之后,View Tree又会变成什么样子呢?

方法:在manifest文件,然后修改application的主题如下:

android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"

这样再打开Hierarchy Viewer,我们就能看到下图:

(注意:本人选用的Android是2.2的,要是用4.1的话,并不能得到下图,中间还会多一个Id为action_menu_bar_stub的ViewStub)

 这时候我们看到content FrameLayout的父元素是PhoneWindow$DecorView。

DecorView

我们知道在Android中抽象类Window定义了最上层窗口的基本外观以及基本行为,她的实例将会被加到WindowManager中,提供一些标准的UI策略,像Background,Titlebar,以及Default key processing等等,当然这些属性是可以通过WindowManager.LayoutParams定制的。

而上面提到的PhoneWindow是Window抽象类的唯一实现,即android.policy.PhoneWindow。而DecorWindow是PhoneWindow的一个私有内部类,其实就是一个FrameLayout的扩展。

private final class DecorView extends FrameLayout implements RootViewSurfaceTaker {}

就是这个类构成了最上层应用程序视图。根据我们在Manifest中设置的Theme或者在PhoneWindow设置的Flags,来确定DecorView的Layout。所以在我们的例子中,第一张中我们有个简单的主题(在Manifest中)包含一个titlebar和contentview,于是PhoneWindow就生成了包含Title的LinearLayout,以及放置content的FrameLayout。而在第二张图中,我们去掉了titlebar主题,所以她就只生成了包含FrameLayout的DecorView了。

结论

最后我们来总结下,当一个Activity被启动的时候,这个视图树(View Tree)大体是如何创建的呢:

1. PhoneWindow根据Manifest的主题或者是特定的PhoneWindow设置去生成一个DevorView的布局,作为跟视图(Root View)。

2. Activity调用setContentView()方法把用户自定义的Layout XML文件作为内容视图(Content View), 当然其内部是调用PhoneWindow的setContentView()方法。

3. 经过上两步,UI视图就已经形成了,那么当UI每次被刷新的时候,View Tree就会像上面所说的那样被Traverse。



 Activity可以看做是整个android系统的人机接口,它提供了一个窗口来绘制UI,每个Activity在启动时,我们都需要给它设置一个Content view,作为Activity所呈现的UI内容,这个过程是通过setContentView()方法来实现的。

    众所周知,android系统中强化了view的概念,主要是体现在对view的管理上,Android中的view以2种形态存在,单一的View和多个View组成的ViewGroup。Content view是以ViewGroup的形式存在的,也就是说在一个Activity窗口中可以添加多个View,这样就实现了Android窗口系统的UI多样化。activity启动时给activity窗口设置的Content view 是从xml文件中解析出来的,那么android是怎么样对这个ContentView进行管理的呢,它的内部实现逻辑又是怎样的呢?

    在进行分析之前,首先给出一个Activity的window和view系统的层级关系,这个层级关系就是在Activity设置完ContentView之后的状况。    

    如下图。



下面来一一介绍各个层级的含义与作用

1.1  PhoneWindow

    PhoneWindow是Android中的最基本的窗口系统,每个Activity 均会创建一个PhoneWindow对象,是Activity和整个View系统交互的接口。


1.2  DecorView

    DecorView是当前Activity所有View的祖先,它并不会向用户呈现任何东西,它主要有如下几个功能,可能不全:

A.  Dispatch ViewRoot分发来的key、touch、trackball等外部事件;

B.  DecorView有一个直接的子View,我们称之为System Layout,这个View是从系统的Layout.xml中解析出的,它包含当前UI的风格,如是否带title、是否带process bar等。可以称这些属性为Window decorations。

C.  作为PhoneWindow与ViewRoot之间的桥梁,ViewRoot通过DecorView设置窗口属性。


1.3  System Layout

    目前android根据用户需求预设了几种UI 风格,通过PhoneWindow通过解析预置的layout.xml来获得包含有不同Window decorations的layout,我们称之为System Layout,我们将这个System Layout添加到DecorView中,目前android提供了8种System Layout,如下图。

    预设风格可以通过PhoneWindow方法requestFeature()来设置,需要注意的是这个方法需要在setContentView()方法调用之前调用。


1.4  Content Parent

    Content Parent这个ViewGroup对象才是真真正正的ContentView的parent,我们的ContentView终于找到了寄主,它其实对应的是System Layout中的id为”content”的一个FrameLayout。这个FrameLayout对象包括的才是我们的Activity的layout(每个System Layout都会有这么一个id为”content”的一个FrameLayout)。



1.5  Activity Layout

    这个ActivityLayout便是我们需要向窗口设置的ContentView,现在我们发现其实它的地位很低,同时这一部分才是和user交互的UI部分,其上的几层并不能响应并完成user输入所期望达到的目的。



Android的title默认样式有些单调,今天来介绍如何改变title的样式,先上图。

这里我在前面加了个logo,而且改变了title的背景和高度。

首先编写title的布局文件,title.xml:

<?xml version=”1.0″ encoding=”utf-8″?>
<LinearLayout
xmlns:android=”http://schemas.android.com/apk/res/android”
android:orientation=”horizontal”
android:layout_width=”fill_parent”
android:layout_height=”fill_parent”
android:background=”@drawable/bg_title”
android:gravity=”center_vertical”>
<ImageView
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
android:background=”@drawable/title_logo”
/>
<TextView
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
android:text=”@string/app_name”
android:textSize=”20sp”
android:layout_marginLeft=”80dip”
android:textColor=”#ffffff”
/>
</LinearLayout>

然后在Activity的onCreate()里加上这三句话:

requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
setContentView(R.layout.main);
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE,R.layout.title);

需要注意的是这三句话的顺序不能变。到这里只是改变了title的布局,下面改变背景和高度,这就需要改变Activity的theme。

在values文件夹下新建文件style.xml:

<?xml version=”1.0″ encoding=”utf-8″?>
<resources>
<style name=”CustomWindowTitleBackground”>
<item name=”android:background”>@drawable/bg_title</item>
</style>
<style name=”title_style” parent=”android:Theme”>
<item name=”android:windowTitleSize”>44dip</item>
<item name=”android:windowTitleBackgroundStyle”>@style/CustomWindowTitleBackground</item>
</style>
</resources>

最后在AndroidManifest.xml里面加上:

<activity android:name=”.sysinfo”
android:label=”@string/app_name”
android:screenOrientation=”portrait”
android:theme=”@style/title_style”
>

这样就实现了自定义title。

Android-UI组件合集,2021年阿里Android高级面试题及答案 drag-sort-listview 在ListItem拖动重排序。 开发者已经放弃维护了但是关注者依然不少。 FreeFlow comcast出品的一个布局引擎。 FreeFlow让你很容易的定制布局和漂亮的转换动画。看到comcast好激动, 因为他是笔者公司最大的客户。 FadingActionBar 折叠风格的ActionBar. 说起ActionBar, 第一选择不是ActionBarSherlock么? android-viewflow 可以水平滚动的视图。 android-flip 可以. 阅读详情

相关推荐

Android UI框架之 XUI

TextView、Button、EditText、ImageView、Spinner、Picker、Dialog、PopupWindow、ProgressBar、LoadingView、StateLayout、FlowLayout、Switch、Actionbar、TabBar、Banner、GuideView、BadgeView、MarqueeView、WebView、SearchView等一系列的组件和丰富多彩的样式主题。需要定义各种资源文件。具体的组件API使用挺多的。市面上好用的三方UI也不少。

lixinxiaos的博客 2882

Android UI 基础知识

Android应用界面包含用户可查看并与之交互的所有内容。Android 提供丰富多样的预置 UI 组 件,例如结构化布局对象和 UI 控件,您可以利用这些组件为您的应用构建图形界面。Android 还提供其他界面模块,用于构建特殊界面,例如对话框、通知和菜单。 Android UI 都是由布局和控件组成的

qq_57749830的博客 2916

基于雷电模拟器与按键精灵的安卓应用自动化实战指南

图形用户界面(GUI)自动化是软件测试与流程自动化领域的重要技术,其核心原理是通过程序模拟用户的鼠标点击、键盘输入等交互行为,替代重复性手动操作。在移动应用场景中,这项技术能显著提升UI测试、批量任务执行的效率与准确性。通过结合雷电模拟器提供的稳定安卓虚拟环境与按键精灵强大的图色识别能力,开发者可以构建一套不依赖应用内部代码、直接从交互界面入手的通用自动化方案。该方案特别适用于自动化测试、日常任务脚本(如签到、阅读)等场景,其低代码特性与基于图像识别的设计,有效降低了自动化实施门槛,为移动应用的自动化测试与

weixin_33725126的博客 375

【Android】实验二 Android GUI开发

一、实验目的 1、学习android程序GUI的开发方法。 2、学习android程序一个RelativeLayout布局的开发方法。 二、实验内容 1、实现个人爱好的设置界面,包含4种个人爱好,分别为运动、学习、看书和爬山,并且用户能同时选择多个爱好。 2、使用RelativeLayout布局完成如下界面的设计,可以尝试对按钮进行事件处理。 三、实验步骤 1、建立一个android工程,修改main.xml文件并编写程序代码,设计一个个人爱好的设置界面,包含4种个人爱好,分别为运动.

二琳爱吃肉的博客 1987

在命令行打开安卓UI界面

文章目录1. 首先获取root权限2. 获取包名字参考链接 android 8.1 adb 1.0.39 1. 首先获取root权限 adb root 2. 获取包名字 可以用android SDK自带的工具uiautomatorviewer.bat, 在目录tools\bin下面,双击直接运行,点击左上角的dump按钮,即可通过adb加载安卓界面。 在界面的右下角可以看到Node ...

叉叉敌的博客 2996

车载图形开发—运用Android开发UI技术实现

在一些特殊情况下,可以通过自定义View来实现复杂的UI效果,例如自定义进度条、雷达图等本文主要讲在车载图形开发中使用Android开发技术实现;希望本文给你带来一些技术提升,有关更多的车载技术提升可以参考《车载开发手册》里面有详细记录了车载开发的进阶资料。点击查看类目获取相关。Android图形界面开发是指使用Android平台提供的UI组件和相关工具进行界面设计和实现的过程。Android提供了丰富的UI组件和布局方式,使得开发者能够轻松地构建出漂亮、易用的应用程序。

m0_71524094的博客 1075

MAI-UI-8B开箱即用:一键部署智能助手API服务

本文介绍了如何在星图GPU平台上一键自动化部署MAI-UI-8B镜像,快速搭建智能助手API服务。该镜像具备顶尖的屏幕识别与操作能力,可应用于自动化购物、行程规划等手机任务处理场景,显著提升移动端AI助手开发效率。

weixin_42604188的博客 80

安卓测试开发 - 安卓开发基础 - Android UI 基础知识总结1 布局的结构及内外边距

最近做安卓测试总结下安卓开发的相关知识已被后续更好的负能量测试及白盒测试预备

lw的博客 1247

如何利用免Root框架实现Android深度定制?LSPatch全攻略与实践指南

在Android生态系统中,用户对系统定制和功能扩展的需求日益增长,但传统Root方式带来的安全风险和保修问题让许多用户望而却步。LSPatch作为一款基于LSPosed技术的免Root框架,通过创新的APK注入机制,让普通用户无需解锁Bootloader即可享受Xposed模块功能,为Android定制提供了安全可靠的非Root解决方案。本文将系统介绍LSPatch的技术原理、实战操作及高级应用

gitblog_00743的博客 251

C#通过ADB和UiAutomator实现对安卓手机的控制(一)

从事安卓开发的朋友应该都知道adb和UiAutomator是什么了,前者是安卓调试桥(Android Debug Bridge),通过它我们可以调试安卓设备中的程序;后者是一款安卓ui的自动化测试工具,它可以对安卓设备实现自动化的点击、滑动、输入等操作。通过这两个工具我们可以控制安卓设备 安装/卸载/打开/关闭 某个应用,也可以让手机自动执行浏览、点击、输入文字等操作。但是这两款工具是通过命令行操作……

而立码农 1万+

1020空心杯电机驱动设计与ESP32实战

空心杯电机是一种高动态响应的直流微特电机,其驱动本质是解决电感负载下的大di/dt启动、反电动势耦合与电流纹波抑制问题。核心原理在于建立包含内阻、电感和反电动势的等效电路模型,并据此匹配开关器件、PWM参数与采样闭环。技术价值体现在小体积下实现毫秒级响应、低噪声(>30kHz)、高精度电流保护(±50mA)及热鲁棒性。典型应用于微型航模、手持云台与精密执行器等对功率密度和动态性能敏感的嵌入式系统。本文以1020规格空心杯电机为对象,基于ESP32平台完成从MOSFET选型、32kHz硬件PWM生成到INA2

weixin_42298164的博客 580

LSPatch免Root框架终极指南:轻松实现Android应用深度定制

想要在不Root手机的情况下,体验Android应用的高级定制功能吗?LSPatch就是您的最佳选择!作为基于LSPosed框架的无Root实现方案,LSPatch让普通Android用户也能轻松享受Xposed模块的强大功能。这款免Root框架通过创新的技术方案,为您的应用注入新的活力,真正实现了安全与自由的完美平衡。 ## 🎯 LSPatch是什么?为什么选择它? LSPatch是一个革

gitblog_00873的博客 174

告别TwinCAT:手把手教你用IgH EtherCAT Master在LinuxCNC上搭建实时运动控制平台

本文详细介绍了如何利用IgH EtherCAT Master和LinuxCNC搭建开源实时运动控制平台,替代商业软件TwinCAT。通过分步指南,包括实时Linux环境配置、EtherCAT主站安装、LinuxCNC集成及多轴同步控制实现,帮助开发者构建高性能、低成本的工业自动化解决方案。

weixin_42641741的博客 401

安卓Android 架构模式及UI布局设计

界面设计与程序逻辑分离:有利于并行安卓中的架构模式 **优势:** 1. 设计可扩展的应用程序,方便进行未来的更改和更新。 2. 实现模块化设计,提高代码质量,便于测试和维护。开发,后期修改界面时不需修改程序逻辑代码。设计模式MVC、MVP、MVVM

m0_74154295的博客 3918

运放偏置电路设计:如何精准计算差分放大器的电压偏移量

本文深入解析了差分放大器偏置电路的设计原理与精准计算方法,重点阐述了如何通过引入参考电压实现信号电压偏移,以适应单电源ADC的输入范围。文章结合实战案例,详细推导了偏移电压公式,并强调了电阻匹配、运放选型及PCB布局对精度和共模抑制比的关键影响,帮助硬件工程师避免常见设计陷阱。

weixin_29288313的博客 633

TensorFlow实战:5步搞定因果推断模型TARNet(附完整代码)

本文提供了一份基于TensorFlow的TARNet因果推断模型实战指南。通过五个清晰步骤,从数据预处理、模型构建到训练评估,详细讲解了如何利用深度模型解决营销评估、疗效分析等场景中的因果效应估计问题,并附有完整代码解决样本不平衡等工程挑战。

python9snake的博客 415

安卓小白开发第二弹 UI图形界面设计

各位小白们,这一讲主要就是介绍安卓开发的第一步,图形界面的设计。这里介绍最基础的图形界面,仅仅包含图像(用户头像),用户姓名,登录密码和登录按键以及版本型号的图形显示。 这里就不再讲述开始的创建项目操作,仍然选择最简单的Empty activity。自己命名一个自己能看懂的名字。 第一个知识点:constraintv layout 对于图片中的红色提示解决方案: 1、对应的文本框边框有四个圆圈,可以点击圆圈将圆圈和整个界面的上下左右四个界面边框相连接进行固定(这是一种比较麻烦的方法) 2、 接下来设置姓名

weixin_45584880的博客 1964

搭建ipv6并发代理池

我开了个知识星球,把将本期搭建写成shell脚本已放到了里面,有需要的小伙伴可以自行去取,jd的参数,阿里bxet纯算、快手滑块,Pdd—Anti,ikuai,b站login之-极验3文字,某音ab,瑞数456vmp补环境等等,主要是某些大佬加我问成品,很多人都打着白嫖的手段去加我好友为目的,问完基本就以后没有任何的交集,这样的交好友雀氏没有任何意义。不如我直接开个星球,里面直接放我逆向的成品以及逆向的思路,这样大家各取所需,我也有点收益,意义更明确点,免得浪费大家的时间。我是pve下的ubuntu。

weixin_44697518的博客 1471

安卓自定义UI组件开发流程

开发安卓自定义UI组件的流程大致可以分为以下几个步骤:确定需求和设计:创建自定义组件类:定义自定义属性:处理自定义属性:测量和布局:绘制组件:处理交互:优化性能:测试组件:文档和示例:集成到项目中:通过以上步骤,你可以创建出功能丰富、外观独特的自定义UI组件,以满足你的应用开发需求。要自己绘制 UI 组件,你需要了解 Android 中自定义 View 的机制。以下是实现自定义绘制 UI 组件的基本步骤:创建自定义 View 类: 创建一个新的 Java 类,继承自 或其他相关的基类(如 用于复杂动画或

Yimi-依米 的博客 1697

Python爬虫深度对抗:拼多多与得物价格监控系统中的设备指纹模拟与SkyWalking风控绕过实战

在电商数据采集领域,拼多多和得物(毒)APP堪称国产风控系统的“双子星”。前者依托于拼多多集团强大的安全团队,后者则以其独特的“潮流单品”数据价值和高昂的爬取成本闻名。对于任何一名爬虫工程师而言,能够稳定、高效地获取这两大平台的价格、库存、销量等动态信息,都是一项极具挑战性的技术试金石。传统的基于requests库的简单HTTP请求,在面对这两款应用时几乎寸步难行。你会发现,无论怎样伪造User-Agent、怎样轮换代理IP,返回的永远是状态码412403,或者是一个包含验证滑块设备异常的JSON错误。

2201_76125261的博客 864

Vue2 - 最新详细实现接入天地图详细配置流程及示例代码教程,提供获取用户当前定位的城市名称及省市区数据、精准经纬度信息、IP属地定位、地图搜索标点等示例,解决天地图跨域报错/页面白屏/定位不准问题

vue2,nuxt2,天地图,使用教程,vue接入国家天地图,定位api,ip属地定位,获取用户当前位置数据,省市区,地图不显示,白屏,报错,vue2如何使用天地图,地图选点,cors跨域,白名单设置了还是不行,vue项目调用天地图api实现定位,Vue2中使用天地图,详细教程,天地图申请密钥key教程,经纬度,经纬度不准确,一直定位北京,定位在北京不准怎么办,nuxt项目天地图,网站,网页,h5页面,地图显示不全,获取当前定位,如何使用天地图,拿到客户ip地址定位城市名称,距离计算,实时搜索地址逆解析,天

🏆 前端领域优质创作者 5324

Escrcpy:把多设备 Android UI 回归测试搬进图形界面

如果发版前要在三台不同品牌的手机上,把登录、下单、支付这套流程完整点一遍,你大概知道 Android UI 自动化测试里最磨人的环节在哪——它不复杂,就是重复,而且设备一多,命令行脚本就开始互相打架。对刚接触 Android 测试的人来说,光是把测试环境搭起来,往往就要花掉半天。Escrcpy 是一个基于 Electron 的图形化 Scrcpy 工具,把设备镜像、多设备控制和任务调度放进同一个界

gitblog_00232的博客 650

SAP_SD模块销售开票计划预收款系统配置及前台操作说明

在 SAP SD 中,开票计划(Billing Plan)是一种允许根据时间节点或里程碑对销售订单进行分期开票的功能。其中最常见的一种应用就是预收款(Down Payment Billing),即在销售订单中直接定义某个百分比或金额作为预收款,系统在开票时自动生成预收账单。大额合同或长期项目型销售(先收 20%,交货前收 30%,交货后收 50%)。分期付款模式(分阶段收款)。必须预收款才能安排生产或交货的业务。后台路径:SPRO—销售与分享—销售—销售凭证—销售凭证项目—定义项目类别。

我小时候很黑的博客 1407

java实现图形界面输入半径求圆面积_测试开发工程师系列之Android自动化测试Appium(Python)连载(7)安卓图形界面...

安卓图形界面UI即User Interface(用户界面)的简称。泛指用户操作界面,包含移动APP,网页,智能穿戴设备等。Android用户界面测试,要测试应用程序如何与一个真实的用户交互。这种测试确保应用程序返回响应用户一系列操作的正确的UI输出,如键盘输入或按工具栏,菜单,对话框,图像,和其他用户界面控件。Android的界面是由布局和控件协同完成的,布局好比是建筑里的框架,而控件则相当于建筑...

weixin_39942637的博客 176

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

安卓手机使用linux(含图形界面)——Aid Learning

以前再安卓手机上使用linux系统都是使用Termux,安装上很麻烦,而且还是黑乎乎的窗口,没有图形界面,对于初学linux者来说并不友好,而Aid Learning就更人性化了,不仅安装十分简易,操作起来也很顺手,有图形界面,还支持电脑连接,获取屏幕进行操控。 安装 首先保证手机有足够的剩余空间,大于7G即可,接着进入Aid Learning官网,http://www.aidlearning.net/,在主页底选择阿里云下载,(建议使用电脑进入官网下载,在将下载的apk文件传输到手机进行安装,因为我之前用

weixin_44690490的博客 1万+

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

上一篇: COMPASS--让css开发上一个层次
下一篇: U-boot知识整理1
freemindhack
博客等级 码龄13年 53粉丝 182原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值